splitBetweenIndexed method
Splits the elements into chunks between some elements and indices.
Each pair of adjacent elements and the index of the latter are
checked using test
for whether a chunk should end between them.
If so, the elements since the previous chunk-splitting elements
are emitted as a list.
Any remaining elements are emitted at the end.
Example:
var parts = [1, 0, 2, 1, 5, 7, 6, 8, 9]
.splitBetweenIndexed((i, v1, v2) => v1 > v2);
print(parts); // ([1], [0, 2], [1, 5, 7], [6, 8, 9])
Implementation
Iterable<List<T>> splitBetweenIndexed(
bool Function(int index, T first, T second) test) sync* {
var iterator = this.iterator;
if (!iterator.moveNext()) return;
var previous = iterator.current;
var chunk = <T>[previous];
var index = 1;
while (iterator.moveNext()) {
var element = iterator.current;
if (test(index++, previous, element)) {
yield chunk;
chunk = [];
}
chunk.add(element);
previous = element;
}
yield chunk;
}