splitWhere method

Iterable<Iterable<T>> splitWhere(
  1. bool predicate(
    1. T
    ), {
  2. bool keepSeparator = false,
})

Splits the is iterable into multiple iterables on elements that satisfy the given predicate.

If keepSeparator is true, the returned iterables will be interleaved with the value of the separator. Otherwise, the separator elements will be omitted from the output.

Implementation

Iterable<Iterable<T>> splitWhere(
  bool Function(T) predicate, {
  bool keepSeparator = false,
}) sync* {
  var buffer = <T>[];

  for (final o in this) {
    if (predicate(o)) {
      yield List.unmodifiable(buffer);
      if (keepSeparator) yield [o];
      buffer = <T>[];
    } else {
      buffer.add(o);
    }
  }

  if (buffer.isNotEmpty) {
    yield List.unmodifiable(buffer);
  }
}