intersperseWith<B> method

Iterable<B> intersperseWith<B>({
  1. required Transformer<A, B> itemBuilder,
  2. required SeparatorBuilder<A, B> separatorBuilder,
  3. Transformer<A, B>? beforeFirst,
  4. Transformer<A, B>? afterLast,
})

Implementation

Iterable<B> intersperseWith<B>({
  required Transformer<A, B> itemBuilder,
  required SeparatorBuilder<A, B> separatorBuilder,
  Transformer<A, B>? beforeFirst,
  Transformer<A, B>? afterLast,
}) sync* {
  final iterator = this.iterator;
  if (iterator.moveNext()) {
    if (beforeFirst != null) {
      yield beforeFirst(iterator.current);
    }

    yield itemBuilder(iterator.current);
    var prev = iterator.current;
    while (iterator.moveNext()) {
      yield separatorBuilder(prev, iterator.current);
      prev = iterator.current;
      yield itemBuilder(iterator.current);
    }

    if (afterLast != null) {
      yield afterLast(prev);
    }
  }
}