@Override public Array<T> subSequence(int beginIndex) { if (beginIndex < 0 || beginIndex > length()) { throw new IndexOutOfBoundsException("subSequence(" + beginIndex + ")"); } else { return drop(beginIndex); } }
@Override public Tuple2<Array<T>, Array<T>> splitAt(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final Array<T> init = takeWhile(predicate.negate()); return Tuple.of(init, drop(init.length())); }
@Override public Tuple2<Array<T>, Array<T>> splitAt(int n) { return Tuple.of(take(n), drop(n)); }
@Override public Array<T> patch(int from, Iterable<? extends T> that, int replaced) { from = from < 0 ? 0 : from; replaced = replaced < 0 ? 0 : replaced; Array<T> result = take(from).appendAll(that); from += replaced; result = result.appendAll(drop(from)); return result; }
@Override public Tuple2<Array<T>, Array<T>> splitAtInclusive(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < delegate.length; i++) { final T value = get(i); if (predicate.test(value)) { if (i == delegate.length - 1) { return Tuple.of(this, empty()); } else { return Tuple.of(take(i + 1), drop(i + 1)); } } } return Tuple.of(this, empty()); }
static <T> Array<Array<T>> apply(Array<T> elements, int k) { if (k == 0) { return Array.of(Array.empty()); } else { return elements.zipWithIndex().flatMap( t -> apply(elements.drop(t._2 + 1), (k - 1)).map(c -> c.prepend(t._1)) ); } } }
@Override public Array<T> subSequence(int beginIndex) { if (beginIndex < 0 || beginIndex > length()) { throw new IndexOutOfBoundsException("subSequence(" + beginIndex + ")"); } else { return drop(beginIndex); } }
@Override public Tuple2<Array<T>, Array<T>> splitAt(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final Array<T> init = takeWhile(predicate.negate()); return Tuple.of(init, drop(init.length())); }
@Override public Tuple2<Array<T>, Array<T>> splitAt(int n) { return Tuple.of(take(n), drop(n)); }
@Override public Array<T> patch(int from, Iterable<? extends T> that, int replaced) { from = from < 0 ? 0 : from; replaced = replaced < 0 ? 0 : replaced; Array<T> result = take(from).appendAll(that); from += replaced; result = result.appendAll(drop(from)); return result; }
@Override public Tuple2<Array<T>, Array<T>> splitAtInclusive(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < delegate.length; i++) { final T value = get(i); if (predicate.test(value)) { if (i == delegate.length - 1) { return Tuple.of(this, empty()); } else { return Tuple.of(take(i + 1), drop(i + 1)); } } } return Tuple.of(this, empty()); }
static <T> Array<Array<T>> apply(Array<T> elements, int k) { if (k == 0) { return Array.of(Array.empty()); } else { return elements.zipWithIndex().flatMap( t -> apply(elements.drop(t._2 + 1), (k - 1)).map(c -> c.prepend(t._1)) ); } } }