@Override public Tuple2<BitSet<T>, BitSet<T>> span(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return iterator().span(predicate).map(this::createFromAll, this::createFromAll); }
@Override public Tuple2<BitSet<T>, BitSet<T>> partition(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return iterator().partition(predicate).map(this::createFromAll, this::createFromAll); }
@Override public BitSet<T> distinctBy(Comparator<? super T> comparator) { Objects.requireNonNull(comparator, "comparator is null"); return isEmpty() ? this : createFromAll(iterator().distinctBy(comparator)); }
@Override public BitSet<T> takeRight(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().takeRight(n)); } }
@Override public BitSet<T> take(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().take(n)); } }
@Override public <U> BitSet<T> distinctBy(Function<? super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor, "keyExtractor is null"); return isEmpty() ? this : createFromAll(iterator().distinctBy(keyExtractor)); }
@Override public Tuple2<BitSet<T>, BitSet<T>> span(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); return iterator().span(predicate).map(this::createFromAll, this::createFromAll); }
@Override public BitSet<T> dropRight(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().dropRight(n)); } }
@Override public BitSet<T> drop(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().drop(n)); } }
@Override public Iterator<BitSet<T>> sliding(int size, int step) { return iterator().sliding(size, step).map(this::createFromAll); }
@Override public Iterator<BitSet<T>> slideBy(Function<? super T, ?> classifier) { return iterator().slideBy(classifier).map(this::createFromAll); }
@Override public BitSet<T> takeWhile(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final BitSet<T> result = createFromAll(iterator().takeWhile(predicate)); return (result.length() == length()) ? this : result; }
@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 BitSet<T> dropWhile(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final BitSet<T> bitSet = createFromAll(iterator().dropWhile(predicate)); return (bitSet.length() == length()) ? this : bitSet; }
@Override public BitSet<T> dropRight(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().dropRight(n)); } }
@Override public <U> BitSet<T> distinctBy(Function<? super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor, "keyExtractor is null"); return isEmpty() ? this : createFromAll(iterator().distinctBy(keyExtractor)); }
@Override public BitSet<T> takeRight(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().takeRight(n)); } }
@Override public BitSet<T> take(int n) { if (isEmpty() || n >= length()) { return this; } else if (n <= 0) { return createEmpty(); } else { return createFromAll(iterator().take(n)); } }
@Override public BitSet<T> reject(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final BitSet<T> bitSet = createFromAll(iterator().reject(predicate)); return (bitSet.length() == length()) ? this : bitSet; }
@Override public BitSet<T> drop(int n) { if (n <= 0 || isEmpty()) { return this; } else if (n >= length()) { return createEmpty(); } else { return createFromAll(iterator().drop(n)); } }