distinct method

OffsetIterator<T> distinct({
  1. bool equals(
    1. T prev,
    2. T next
    )?,
  2. String name = 'distinct',
  3. SeedCallback<T>? seed,
  4. int retention = 0,
  5. bool? cancelOnError,
  6. bool bubbleCancellation = true,
})

Implementation

OffsetIterator<T> distinct({
  bool Function(T prev, T next)? equals,
  String name = 'distinct',
  SeedCallback<T>? seed,
  int retention = 0,
  bool? cancelOnError,
  bool bubbleCancellation = true,
}) {
  bool Function(T, T) eq = equals ?? (prev, next) => prev == next;
  Option<T> prev = const None();
  seed = generateSeed(override: seed);

  return transform(
    (item) {
      if (O.isNone(prev)) {
        prev = Some(item);
        return [item];
      }

      final duplicate = eq((prev as Some).value, item);
      prev = Some(item);
      return duplicate ? const [] : [item];
    },
    seed: () {
      if (seed != null) prev = seed();
      return prev;
    },
    name: name,
    retention: retention,
    bubbleCancellation: bubbleCancellation,
    cancelOnError: cancelOnError,
  );
}