@Override public Vector<T> removeAt(int index) { if (isValid(index)) { final Vector<T> begin = take(index); final Vector<T> end = drop(index + 1); return (begin.size() > end.size()) ? begin.appendAll(end) : end.prependAll(begin); } else { throw new IndexOutOfBoundsException("removeAt(" + index + ")"); } }
@Override public Tuple2<Vector<T>, Vector<T>> splitAt(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final Vector<T> init = takeWhile(predicate.negate()); return Tuple.of(init, drop(init.size())); }
@Override public Vector<T> insertAll(int index, Iterable<? extends T> elements) { Objects.requireNonNull(elements, "elements is null"); if ((index >= 0) && (index <= length())) { final Vector<T> begin = take(index).appendAll(elements); final Vector<T> end = drop(index); return (begin.size() > end.size()) ? begin.appendAll(end) : end.prependAll(begin); } else { throw new IndexOutOfBoundsException("insert(" + index + ", e) on Vector of length " + length()); } }
@Override public Vector<T> slice(int beginIndex, int endIndex) { if ((beginIndex >= endIndex) || (beginIndex >= size()) || isEmpty()) { return empty(); } else if ((beginIndex <= 0) && (endIndex >= length())) { return this; } else { return take(endIndex).drop(beginIndex); } }
@Override public Tuple2<Vector<T>, Vector<T>> splitAt(Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); final Vector<T> init = takeWhile(predicate.negate()); return Tuple.of(init, drop(init.size())); }
@Override public Vector<T> removeAt(int index) { if (isValid(index)) { final Vector<T> begin = take(index); final Vector<T> end = drop(index + 1); return (begin.size() > end.size()) ? begin.appendAll(end) : end.prependAll(begin); } else { throw new IndexOutOfBoundsException("removeAt(" + index + ")"); } }
@Override public Vector<T> insertAll(int index, Iterable<? extends T> elements) { Objects.requireNonNull(elements, "elements is null"); if ((index >= 0) && (index <= length())) { final Vector<T> begin = take(index).appendAll(elements); final Vector<T> end = drop(index); return (begin.size() > end.size()) ? begin.appendAll(end) : end.prependAll(begin); } else { throw new IndexOutOfBoundsException("insert(" + index + ", e) on Vector of length " + length()); } }
@Override public Vector<T> slice(int beginIndex, int endIndex) { if ((beginIndex >= endIndex) || (beginIndex >= size()) || isEmpty()) { return empty(); } else if ((beginIndex <= 0) && (endIndex >= length())) { return this; } else { return take(endIndex).drop(beginIndex); } }