insertWith<A> method

Iterable<T> insertWith<A>(
  1. A extract(
    1. T instance
    ),
  2. Order<A> order,
  3. T element
)

Insert element into the Iterable at the first position where it is less than or equal to the next element based on order (Order).

order refers to values of type A extracted from element using extract.

Note: The element is added before an equal element already in the Iterable.

Implementation

Iterable<T> insertWith<A>(
  A Function(T instance) extract,
  Order<A> order,
  T element,
) sync* {
  var it = iterator;
  var elementValue = extract(element);
  while (it.moveNext()) {
    if (order.compare(extract(it.current), elementValue) < 0) {
      yield it.current;
      continue;
    }
    yield element;
    do {
      yield it.current;
    } while (it.moveNext());
    return;
  }
  yield element;
}