group<A> function
- Eq<
A> eq
Groups consecutive similar items based on the equality eq
.
var eq = Eq<int>((a, b) => a == b);
var nel = NonEmptyList([1, 1, 2, 2, 3]);
var groups = group(eq)(nel);
print(groups.map((g) => g.items).toList()); // [[1, 1], [2, 2], [3]]
Implementation
List<NonEmptyList<A>> Function(NonEmptyList<A>) group<A>(Eq<A> eq) =>
(NonEmptyList<A> list) {
List<NonEmptyList<A>> result = [];
List<A> currentGroup = [list._items.first];
list._items.skip(1).forEach((item) {
if (eq.equals(item, currentGroup.last)) {
currentGroup.add(item);
} else {
result.add(NonEmptyList(currentGroup));
currentGroup = [item];
}
});
result.add(NonEmptyList(currentGroup));
return result;
};