@Override default List<T> patch(int from, Iterable<? extends T> that, int replaced) { from = from < 0 ? 0 : from; replaced = replaced < 0 ? 0 : replaced; List<T> result = take(from).appendAll(that); from += replaced; result = result.appendAll(drop(from)); return result; }
@Override public Queue<T> take(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } final int frontLength = front.length(); if (n < frontLength) { return new Queue<>(front.take(n), io.vavr.collection.List.empty()); } else if (n == frontLength) { return new Queue<>(front, io.vavr.collection.List.empty()); } else { return new Queue<>(front, rear.takeRight(n - frontLength)); } }
@Override public Queue<T> takeRight(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } final int rearLength = rear.length(); if (n < rearLength) { return new Queue<>(rear.take(n).reverse(), io.vavr.collection.List.empty()); } else if (n == rearLength) { return new Queue<>(rear.reverse(), io.vavr.collection.List.empty()); } else { return new Queue<>(front.takeRight(n - rearLength), rear); } }
@Override default List<T> takeRight(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } return reverse().take(n).reverse(); }
@Override public Queue<T> take(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } final int frontLength = front.length(); if (n < frontLength) { return new Queue<>(front.take(n), io.vavr.collection.List.empty()); } else if (n == frontLength) { return new Queue<>(front, io.vavr.collection.List.empty()); } else { return new Queue<>(front, rear.takeRight(n - frontLength)); } }
@Override default List<T> patch(int from, Iterable<? extends T> that, int replaced) { from = from < 0 ? 0 : from; replaced = replaced < 0 ? 0 : replaced; List<T> result = take(from).appendAll(that); from += replaced; result = result.appendAll(drop(from)); return result; }
@Override public Queue<T> takeRight(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } final int rearLength = rear.length(); if (n < rearLength) { return new Queue<>(rear.take(n).reverse(), io.vavr.collection.List.empty()); } else if (n == rearLength) { return new Queue<>(rear.reverse(), io.vavr.collection.List.empty()); } else { return new Queue<>(front.takeRight(n - rearLength), rear); } }
@Override default List<T> takeRight(int n) { if (n <= 0) { return empty(); } if (n >= length()) { return this; } return reverse().take(n).reverse(); }