group<A> function

List<ImmutableList<A>> Function(ImmutableList<A>) group<A>(
  1. Eq<A> eq
)

Groups consecutive duplicate items in an ImmutableList using the eq comparator.

Example:

final list = ImmutableList<int>([1, 2, 2, 3, 3]);
final groups = group(Eq.fromDefault<int>())(list);
print(groups.map((group) => group.items));
// Outputs: [(1), (2, 2), (3, 3)]

Implementation

List<ImmutableList<A>> Function(ImmutableList<A>) group<A>(Eq<A> eq) =>
    (ImmutableList<A> list) {
      List<ImmutableList<A>> result = [];
      if (list._items.isEmpty) return 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(ImmutableList(currentGroup));
          currentGroup = [item];
        }
      });
      result.add(ImmutableList(currentGroup));
      return result;
    };