@SuppressWarnings("unchecked") static <K, V, M extends Map<K, V>> M scan(M map, Tuple2<K, V> zero, BiFunction<? super Tuple2<K, V>, ? super Tuple2<K, V>, ? extends Tuple2<K, V>> operation, Function<Iterator<Tuple2<K, V>>, Traversable<Tuple2<K, V>>> finisher) { return (M) Collections.scanLeft(map, zero, operation, finisher); }
@Override public <U> Array<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, Array::ofAll); }
@Override default <U> Seq<U> scanLeft(U zero, BiFunction<? super U, ? super Tuple2<K, V>, ? extends U> operation) { return Collections.scanLeft(this, zero, operation, Iterator::toVector); }
@Override default <U> Stream<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { // lazily streams the elements of an iterator return io.vavr.collection.Collections.scanLeft(this, zero, operation, Iterator::toStream); }
@Override public CharSeq scan(Character zero, BiFunction<? super Character, ? super Character, ? extends Character> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, io.vavr.collection.Iterator::toCharSeq); }
@Override default <U> List<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return Collections.scanLeft(this, zero, operation, Iterator::toList); }
@Override public <U> HashSet<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return Collections.scanLeft(this, zero, operation, HashSet::ofAll); }
@Override public <U> Queue<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, Iterator::toQueue); }
@Override public <U> LinkedHashSet<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return Collections.scanLeft(this, zero, operation, LinkedHashSet::ofAll); }
@SuppressWarnings("unchecked") @Override public M scan(Tuple2<K, V> zero, BiFunction<? super Tuple2<K, V>, ? super Tuple2<K, V>, ? extends Tuple2<K, V>> operation) { return (M) Collections.scanLeft(this, zero, operation, this::createFromEntries); }
@Override default <U> Set<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return Collections.scanLeft(this, zero, operation, HashSet::ofAll); }
@Override default <U> Seq<U> scanLeft(U zero, BiFunction<? super U, ? super Tuple2<K, V>, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, io.vavr.collection.Iterator::toVector); }
@Override public <U> Vector<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, Iterator::toVector); }
@Override default <U> Seq<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, io.vavr.collection.Iterator::toStream); }
@Override public BitSet<T> scan(T zero, BiFunction<? super T, ? super T, ? extends T> operation) { return Collections.scanLeft(this, zero, operation, this::createFromAll); }
@Override public <U> IndexedSeq<U> scanLeft(U zero, BiFunction<? super U, ? super Character, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, io.vavr.collection.Iterator::toVector); }
@Override public <U> Set<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { if (zero instanceof Comparable) { final Comparator<U> comparator = Comparators.naturalComparator(); return Collections.scanLeft(this, zero, operation, iter -> TreeSet.ofAll(comparator, iter)); } else { return Collections.scanLeft(this, zero, operation, HashSet::ofAll); } }
static <T, U, R extends Traversable<U>> R scanRight(Traversable<? extends T> source, U zero, BiFunction<? super T, ? super U, ? extends U> operation, Function<Iterator<U>, R> finisher) { Objects.requireNonNull(operation, "operation is null"); final Iterator<? extends T> reversedElements = reverseIterator(source); return scanLeft(reversedElements, zero, (u, t) -> operation.apply(t, u), us -> finisher.apply(reverseIterator(us))); }
@Override public TreeSet<T> scan(T zero, BiFunction<? super T, ? super T, ? extends T> operation) { return Collections.scanLeft(this, zero, operation, iter -> TreeSet.ofAll(comparator(), iter)); }
@Override public <U> PriorityQueue<U> scanLeft(U zero, BiFunction<? super U, ? super T, ? extends U> operation) { return io.vavr.collection.Collections.scanLeft(this, zero, operation, it -> ofAll(Comparators.naturalComparator(), it)); }