@Override default Iterator<T> reject(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return filter(predicate.negate()); }
@Override default <R> Iterator<R> collect(PartialFunction<? super T, ? extends R> partialFunction) { Objects.requireNonNull(partialFunction, "partialFunction is null"); return filter(partialFunction::isDefinedAt).map(partialFunction::apply); }
static <K, V, M extends Map<K, V>> M filter(M map, OfEntries<K, V, M> ofEntries, Predicate<? super Tuple2<K, V>> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return ofEntries.apply(map.iterator().filter(predicate)); }
@SuppressWarnings("unchecked") @Override public M filter(Predicate<? super Tuple2<K, V>> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (isEmpty()) { return (M) this; } else { return (M) createFromEntries(iterator().filter(predicate)); } }
@Override public PriorityQueue<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (isEmpty()) { return this; } else { return ofAll(comparator, iterator().filter(predicate)); } }
@Override default Tuple2<Iterator<T>, Iterator<T>> partition(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (!hasNext()) { return Tuple.of(empty(), empty()); } else { final Stream<T> that = Stream.ofAll(this); final Iterator<T> first = that.iterator().filter(predicate); final Iterator<T> second = that.iterator().filter(predicate.negate()); return Tuple.of(first, second); } }
@Override public BitSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final BitSet<T> bitSet = createFromAll(iterator().filter(predicate)); return (bitSet.length() == length()) ? this : bitSet; }
@Override public LinkedHashSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final LinkedHashSet<T> filtered = LinkedHashSet.ofAll(iterator().filter(predicate)); return filtered.length() == length() ? this : filtered; }
@Override public TreeSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final TreeSet<T> treeSet = TreeSet.ofAll(tree.comparator(), iterator().filter(predicate)); return (treeSet.length() == length()) ? this : treeSet; }
@Override public HashSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final HashSet<T> filtered = HashSet.ofAll(iterator().filter(predicate)); if (filtered.isEmpty()) { return empty(); } else if (filtered.length() == length()) { return this; } else { return filtered; } }
/** * Chooses one of the given generators according to their frequency. * Only generators with positive frequencies ares used in returned * generator. * * @param generators A non-empty traversable of Tuples (frequency, generator) * @param <T> Type to be generated * @return A new T generator * @throws java.lang.NullPointerException if generators is null * @throws java.lang.IllegalArgumentException if generators doesn't contain any generator with positive frequency */ static <T> Gen<T> frequency(Iterable<Tuple2<Integer, Gen<T>>> generators) { Objects.requireNonNull(generators, "generators is null"); final Vector<Tuple2<Integer, Gen<T>>> filtered = Iterator.ofAll(generators) .filter(t -> t._1() > 0).toVector(); if (filtered.isEmpty()) { throw new IllegalArgumentException("no generator with positive weight"); } final int size = filtered.map(t -> t._1).sum().intValue(); return choose(1, size).flatMap(n -> GenModule.frequency(n, filtered.iterator())); }
@Override default Iterator<T> reject(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return filter(predicate.negate()); }
@Override default <R> Iterator<R> collect(PartialFunction<? super T, ? extends R> partialFunction) { Objects.requireNonNull(partialFunction, "partialFunction is null"); return filter(partialFunction::isDefinedAt).map(partialFunction::apply); }
@SuppressWarnings("unchecked") @Override public M filter(Predicate<? super Tuple2<K, V>> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (isEmpty()) { return (M) this; } else { return (M) createFromEntries(iterator().filter(predicate)); } }
@Override public PriorityQueue<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (isEmpty()) { return this; } else { return ofAll(comparator, iterator().filter(predicate)); } }
@Override public LinkedHashSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final LinkedHashSet<T> filtered = LinkedHashSet.ofAll(iterator().filter(predicate)); return filtered.length() == length() ? this : filtered; }
@Override default Tuple2<Iterator<T>, Iterator<T>> partition(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); if (!hasNext()) { return Tuple.of(empty(), empty()); } else { final Stream<T> that = Stream.ofAll(this); final Iterator<T> first = that.iterator().filter(predicate); final Iterator<T> second = that.iterator().filter(predicate.negate()); return Tuple.of(first, second); } }
@Override public BitSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final BitSet<T> bitSet = createFromAll(iterator().filter(predicate)); return (bitSet.length() == length()) ? this : bitSet; }
@Override public TreeSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final TreeSet<T> treeSet = TreeSet.ofAll(tree.comparator(), iterator().filter(predicate)); return (treeSet.length() == length()) ? this : treeSet; }
@Override public HashSet<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final HashSet<T> filtered = HashSet.ofAll(iterator().filter(predicate)); if (filtered.isEmpty()) { return empty(); } else if (filtered.length() == length()) { return this; } else { return filtered; } }