@Override public T getNext() { return IndexedSeq.this.get(--i); } };
@Override public T apply(Integer index) { return get(index); } @Override
@Override default int lastIndexWhere(Predicate<? super T> predicate, int end) { Objects.requireNonNull(predicate, "predicate is null"); int i = Math.min(end, length() - 1); while (i >= 0 && !predicate.test(this.get(i))) { i--; } return i; }
@Override default int segmentLength(Predicate<? super T> predicate, int from) { Objects.requireNonNull(predicate, "predicate is null"); int len = length(); int i = from; while (i < len && predicate.test(this.get(i))) { i++; } return i - from; }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S takeRightUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = seq.length() - 1; i >= 0; i--) { if (predicate.test(seq.get(i))) { return (S) seq.drop(i + 1); } } return seq; }
/** * Searches this sequence for a specific element using a binary search. The sequence must already be sorted into * ascending order according to the specified comparator. If it is not sorted, the results are undefined. * * @param element the element to find * @param comparator the comparator by which this sequence is ordered * @return the index of the search element, if it is contained in the sequence; * otherwise, <tt>(-(<i>insertion point</i>) - 1)</tt>. The * <i>insertion point</i> is defined as the point at which the * element would be inserted into the sequence. Note that this guarantees that * the return value will be >= 0 if and only if the element is found. */ @Override default int search(T element, Comparator<? super T> comparator) { Objects.requireNonNull(comparator, "comparator is null"); IntUnaryOperator comparison = midIndex -> { T midVal = get(midIndex); return comparator.compare(midVal, element); }; return IndexedSeqModule.Search.binarySearch(this, comparison); }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S takeUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < seq.length(); i++) { if (predicate.test(seq.get(i))) { return (S) seq.take(i); } } return seq; }
/** * Searches this sequence for a specific element using a binary search. The sequence must already be sorted into * ascending natural order. If it is not sorted, the results are undefined. * * @param element the element to find * @return the index of the search element, if it is contained in the sequence; * otherwise, <tt>(-(<i>insertion point</i>) - 1)</tt>. The * <i>insertion point</i> is defined as the point at which the * element would be inserted into the sequence. Note that this guarantees that * the return value will be >= 0 if and only if the element is found. * @throws ClassCastException if T cannot be cast to {@code Comparable<? super T>} */ @Override @SuppressWarnings("unchecked") default int search(T element) { IntUnaryOperator comparison = midIndex -> { Comparable<? super T> midVal = (Comparable<? super T>) get(midIndex); return midVal.compareTo(element); }; return IndexedSeqModule.Search.binarySearch(this, comparison); }
@Override default T last() { if (isEmpty()) { throw new NoSuchElementException("last of empty IndexedSeq"); } else { return get(length() - 1); } }
@Override default boolean startsWith(Iterable<? extends T> that, int offset) { Objects.requireNonNull(that, "that is null"); if (offset < 0) { return false; } if (that instanceof IndexedSeq) { IndexedSeq<? extends T> thatIndexedSeq = (IndexedSeq<? extends T>) that; int i = offset; int j = 0; int thisLen = length(); int thatLen = thatIndexedSeq.length(); while (i < thisLen && j < thatLen && Objects.equals(this.get(i), thatIndexedSeq.get(j))) { i++; j++; } return j == thatLen; } else { int i = offset; int thisLen = length(); java.util.Iterator<? extends T> thatElems = that.iterator(); while (i < thisLen && thatElems.hasNext()) { if (!Objects.equals(this.get(i), thatElems.next())) { return false; } i++; } return !thatElems.hasNext(); } }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S dropRightUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = seq.length() - 1; i >= 0; i--) { if (predicate.test(seq.get(i))) { return (S) seq.take(i + 1); } } return (S) seq.take(0); }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S dropUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < seq.length(); i++) { if (predicate.test(seq.get(i))) { return (S) seq.drop(i); } } return (S) seq.take(0); }
@Override default boolean endsWith(Seq<? extends T> that) { Objects.requireNonNull(that, "that is null"); if (that instanceof IndexedSeq) { int i = length() - 1; int j = that.length() - 1; if (j > i) { return false; } else { while (j >= 0) { if (!Objects.equals(this.get(i), that.get(j))) { return false; } i--; j--; } return true; } } else { return Seq.super.endsWith(that); } }
@Override public MarkupDocBuilder apply(MarkupDocBuilder markupDocBuilder, Parameters params) { DataFrame dataFrame = params.dataFrame; java.util.List<MarkupTableColumn> columnSpecs = dataFrame.getColumns().map(column -> { Integer widthRatio = Integer.valueOf(column.getMetaData().get(WIDTH_RATIO).getOrElse("0")); return new MarkupTableColumn(column.getId().getName()) .withWidthRatio(widthRatio) .withHeaderColumn(Boolean.parseBoolean(column.getMetaData().get(HEADER_COLUMN).getOrElse("false"))) .withMarkupSpecifiers(MarkupLanguage.ASCIIDOC, ".^" + widthRatio + "a"); } ).toJavaList(); IndexedSeq<IndexedSeq<String>> columnValues = dataFrame.getColumns() .map(column -> ((StringColumn) column).getValues()); java.util.List<java.util.List<String>> cells = Array.range(0, dataFrame.getRowCount()) .map(rowNumber -> columnValues.map(values -> values.get(rowNumber)).toJavaList()).toJavaList(); return markupDocBuilder.tableWithColumnSpecs(columnSpecs, cells); }
@Override public T apply(Integer index) { return get(index); } @Override
@Override default int segmentLength(Predicate<? super T> predicate, int from) { Objects.requireNonNull(predicate, "predicate is null"); int len = length(); int i = from; while (i < len && predicate.test(this.get(i))) { i++; } return i - from; }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S takeUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < seq.length(); i++) { if (predicate.test(seq.get(i))) { return (S) seq.take(i); } } return seq; }
@Override default T last() { if (isEmpty()) { throw new NoSuchElementException("last of empty IndexedSeq"); } else { return get(length() - 1); } }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S dropUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = 0; i < seq.length(); i++) { if (predicate.test(seq.get(i))) { return (S) seq.drop(i); } } return (S) seq.take(0); }
@SuppressWarnings("unchecked") static <T, S extends IndexedSeq<T>> S dropRightUntil(S seq, Predicate<? super T> predicate) { Objects.requireNonNull(predicate, "predicate is null"); for (int i = seq.length() - 1; i >= 0; i--) { if (predicate.test(seq.get(i))) { return (S) seq.take(i + 1); } } return (S) seq.take(0); }