@NotNull @Override public ConsList<E> prepend(E elem) { return new Cons<E>(elem, this); }
@NotNull @Override public ConsList<E> take(int number) { java.util.List<E> top = new ArrayList<E>(Math.max(0, number)); ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { top.add(iterator.next()); } ConsList<E> result = empty(); for (int i = top.size() - 1; i >= 0; i--) { result = result.prepend(top.get(i)); } return result; }
@NotNull @Override public ConsList<E> drop(int number) { ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { iterator.next(); } return iterator.current; }
@NotNull @Override public ConsList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { from = fromInclusive ? from : from + 1; to = toInclusive ? to + 1 : to; return this.drop(from).take(to - from); }
@NotNull @Override public ConsList<E> append(E elem) { java.util.List<E> current = new ArrayList<E>(); for (E e : this) { current.add(e); } ConsList<E> result = empty(); result = result.append(elem); for (int i = current.size() - 1; i >= 0; i--) { result = result.prepend(current.get(i)); } return result; }
@NotNull @Override public ConsList<E> take(int number) { java.util.List<E> top = new ArrayList<E>(Math.max(0, number)); ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { top.add(iterator.next()); } ConsList<E> result = empty(); for (int i = top.size() - 1; i >= 0; i--) { result = result.prepend(top.get(i)); } return result; }
@NotNull @Override public ConsList<E> drop(int number) { ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { iterator.next(); } return iterator.current; }
@NotNull @Override public ConsList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { from = fromInclusive ? from : from + 1; to = toInclusive ? to + 1 : to; return this.drop(from).take(to - from); }
@NotNull @Override public ConsList<E> append(E elem) { java.util.List<E> current = new ArrayList<E>(); for (E e : this) { current.add(e); } ConsList<E> result = empty(); result = result.append(elem); for (int i = current.size() - 1; i >= 0; i--) { result = result.prepend(current.get(i)); } return result; }
@NotNull @Override public ConsList<E> take(int number) { java.util.List<E> top = new ArrayList<E>(Math.max(0, number)); ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { top.add(iterator.next()); } ConsList<E> result = empty(); for (int i = top.size() - 1; i >= 0; i--) { result = result.prepend(top.get(i)); } return result; }
@NotNull @Override public ConsList<E> append(E elem) { return new Cons<E>(elem, this); }
@NotNull @Override public ConsList<E> drop(int number) { ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < number && iterator.hasNext(); count++) { iterator.next(); } return iterator.current; }
@NotNull @Override public ConsList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { from = fromInclusive ? from : from + 1; to = toInclusive ? to + 1 : to; return this.drop(from).take(to - from); }
@NotNull @Override public ConsList<E> append(E elem) { java.util.List<E> current = new ArrayList<E>(); for (E e : this) { current.add(e); } ConsList<E> result = empty(); result = result.append(elem); for (int i = current.size() - 1; i >= 0; i--) { result = result.prepend(current.get(i)); } return result; }
@NotNull @Override public ConsList<E> prepend(E elem) { return new Cons<E>(elem, this); }
@NotNull @Override public ConsList<E> set(int i, E elem) { // Copy everything up to the index we need to set java.util.List<E> before = new ArrayList<E>(i); ConsListIterator<E> iterator = (ConsListIterator<E>) iterator(); for (int count = 0; count < i && iterator.hasNext(); count++) { before.add(iterator.next()); } if (!iterator.hasNext()) { throw new IndexOutOfBoundsException(String.valueOf(i)); } iterator.next(); // Discard the current value ConsList<E> result = iterator.current; // Share the unmodified tail result = result.prepend(elem); // Set the new value // Add all the elements before the one we set back for (int index = before.size() - 1; index >= 0; index--) { result = result.prepend(before.get(index)); } return result; }
@NotNull @Override public ConsList<E> append(E elem) { return new Cons<E>(elem, this); }