Class Iterators

java.lang.Object
com.landawn.abacus.util.Iterators

public final class Iterators extends Object

This is a utility class mostly for Iterator.

The methods in this class should only read the input Collection/Array/Iterator parameters, not modify them.

See Also:
  • Method Details

    • get

      public static <T> u.Nullable<T> get(Iterator<? extends T> iter, long index)
      Type Parameters:
      T -
      Parameters:
      iter -
      index -
      Returns:
    • occurrencesOf

      public static long occurrencesOf(Iterator<?> iter, Object valueToFind)
      Parameters:
      iter -
      valueToFind -
      Returns:
    • count

      public static long count(Iterator<?> iter)
      Parameters:
      iter -
      Returns:
    • count

      public static <T, E extends Exception> long count(Iterator<? extends T> iter, Throwables.Predicate<? super T,E> predicate) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iter -
      predicate -
      Returns:
      Throws:
      E
    • repeat

      public static <T> ObjIterator<T> repeat(T e, int n)
      Type Parameters:
      T -
      Parameters:
      e -
      n -
      Returns:
    • repeatEach

      public static <T> ObjIterator<T> repeatEach(Collection<? extends T> c, int n)
      Type Parameters:
      T -
      Parameters:
      c -
      n -
      Returns:
    • repeatAll

      public static <T> ObjIterator<T> repeatAll(Collection<? extends T> c, int n)
      Type Parameters:
      T -
      Parameters:
      c -
      n -
      Returns:
    • repeatEachToSize

      public static <T> ObjIterator<T> repeatEachToSize(Collection<? extends T> c, int size)
      Repeat each to size.
      Type Parameters:
      T -
      Parameters:
      c -
      size -
      Returns:
    • repeatAllToSize

      public static <T> ObjIterator<T> repeatAllToSize(Collection<? extends T> c, int size)
      Repeat all to size.
      Type Parameters:
      T -
      Parameters:
      c -
      size -
      Returns:
    • concat

      @SafeVarargs public static BooleanIterator concat(boolean[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static ShortIterator concat(short[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static ByteIterator concat(byte[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static IntIterator concat(int[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static LongIterator concat(long[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static FloatIterator concat(float[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static DoubleIterator concat(double[]... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static BooleanIterator concat(BooleanIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static CharIterator concat(CharIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static ByteIterator concat(ByteIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static ShortIterator concat(ShortIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static IntIterator concat(IntIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static LongIterator concat(LongIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static FloatIterator concat(FloatIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static DoubleIterator concat(DoubleIterator... a)
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static <T> ObjIterator<T> concat(T[]... a)
      Type Parameters:
      T -
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static <T> ObjIterator<T> concat(Iterator<? extends T>... a)
      Type Parameters:
      T -
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static <T> ObjIterator<T> concat(Iterable<? extends T>... a)
      Type Parameters:
      T -
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static <K, V> ObjIterator<Map.Entry<K,V>> concat(Map<? extends K,? extends V>... a)
      Type Parameters:
      K -
      V -
      Parameters:
      a -
      Returns:
    • concat

      public static <T> ObjIterator<T> concat(Collection<? extends Iterator<? extends T>> c)
      Type Parameters:
      T -
      Parameters:
      c -
      Returns:
    • concatIterables

      public static <T> ObjIterator<T> concatIterables(Collection<? extends Iterable<? extends T>> c)
      Type Parameters:
      T -
      Parameters:
      c -
      Returns:
    • concat

      @SafeVarargs public static <A, B> BiIterator<A,B> concat(BiIterator<A,B>... a)
      Type Parameters:
      A -
      B -
      Parameters:
      a -
      Returns:
    • concat

      @SafeVarargs public static <A, B, C> TriIterator<A,B,C> concat(TriIterator<A,B,C>... a)
      Type Parameters:
      A -
      B -
      C -
      Parameters:
      a -
      Returns:
    • merge

      public static <T> ObjIterator<T> merge(Iterator<? extends T> a, Iterator<? extends T> b, BiFunction<? super T,? super T,MergeResult> nextSelector)
      Type Parameters:
      T -
      Parameters:
      a -
      b -
      nextSelector -
      Returns:
    • merge

      public static <T> ObjIterator<T> merge(Collection<? extends Iterator<? extends T>> c, BiFunction<? super T,? super T,MergeResult> nextSelector)
      Type Parameters:
      T -
      Parameters:
      c -
      nextSelector - first parameter is selected if Nth.FIRST is returned, otherwise the second parameter is selected.
      Returns:
    • merge

      public static <T> ObjIterator<T> merge(Iterable<? extends T> a, Iterable<? extends T> b, BiFunction<? super T,? super T,MergeResult> nextSelector)
      Type Parameters:
      T -
      Parameters:
      a -
      b -
      nextSelector -
      Returns:
    • mergeIterables

      public static <T> ObjIterator<T> mergeIterables(Collection<? extends Iterable<? extends T>> iterables, BiFunction<? super T,? super T,MergeResult> nextSelector)
      Type Parameters:
      T -
      Parameters:
      iterables -
      nextSelector -
      Returns:
    • mergeSorted

      public static <T extends Comparable> ObjIterator<T> mergeSorted(Iterator<? extends T> a, Iterator<? extends T> b)
      Type Parameters:
      T -
      Parameters:
      a - should be in non-descending order as this method does not sort its input.
      b - should be in non-descending order as this method does not sort its input.
      Returns:
    • mergeSorted

      public static <T> ObjIterator<T> mergeSorted(Iterator<? extends T> a, Iterator<? extends T> b, Comparator<? super T> cmp)
      Type Parameters:
      T -
      Parameters:
      a - should be in non-descending order as this method does not sort its input.
      b - should be in non-descending order as this method does not sort its input.
      cmp -
      Returns:
    • mergeSorted

      public static <T extends Comparable> ObjIterator<T> mergeSorted(Iterable<? extends T> a, Iterable<? extends T> b)
      Type Parameters:
      T -
      Parameters:
      a - should be in non-descending order as this method does not sort its input.
      b - should be in non-descending order as this method does not sort its input.
      Returns:
    • mergeSorted

      public static <T> ObjIterator<T> mergeSorted(Iterable<? extends T> a, Iterable<? extends T> b, Comparator<? super T> cmp)
      Type Parameters:
      T -
      Parameters:
      a - should be in non-descending order as this method does not sort its input.
      b - should be in non-descending order as this method does not sort its input.
      cmp -
      Returns:
    • zip

      public static <A, B, R> ObjIterator<R> zip(Iterator<A> a, Iterator<B> b, BiFunction<? super A,? super B,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      R -
      Parameters:
      a -
      b -
      zipFunction -
      Returns:
    • zip

      public static <A, B, R> ObjIterator<R> zip(Iterable<A> a, Iterable<B> b, BiFunction<? super A,? super B,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      R -
      Parameters:
      a -
      b -
      zipFunction -
      Returns:
    • zip

      public static <A, B, C, R> ObjIterator<R> zip(Iterator<A> a, Iterator<B> b, Iterator<C> c, TriFunction<? super A,? super B,? super C,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      C -
      R -
      Parameters:
      a -
      b -
      c -
      zipFunction -
      Returns:
    • zip

      public static <A, B, C, R> ObjIterator<R> zip(Iterable<A> a, Iterable<B> b, Iterable<C> c, TriFunction<? super A,? super B,? super C,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      C -
      R -
      Parameters:
      a -
      b -
      c -
      zipFunction -
      Returns:
    • zip

      public static <A, B, R> ObjIterator<R> zip(Iterator<A> a, Iterator<B> b, A valueForNoneA, B valueForNoneB, BiFunction<? super A,? super B,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      R -
      Parameters:
      a -
      b -
      valueForNoneA -
      valueForNoneB -
      zipFunction -
      Returns:
    • zip

      public static <A, B, R> ObjIterator<R> zip(Iterable<A> a, Iterable<B> b, A valueForNoneA, B valueForNoneB, BiFunction<? super A,? super B,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      R -
      Parameters:
      a -
      b -
      valueForNoneA -
      valueForNoneB -
      zipFunction -
      Returns:
    • zip

      public static <A, B, C, R> ObjIterator<R> zip(Iterator<A> a, Iterator<B> b, Iterator<C> c, A valueForNoneA, B valueForNoneB, C valueForNoneC, TriFunction<? super A,? super B,? super C,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      C -
      R -
      Parameters:
      a -
      b -
      c -
      valueForNoneA -
      valueForNoneB -
      valueForNoneC -
      zipFunction -
      Returns:
    • zip

      public static <A, B, C, R> ObjIterator<R> zip(Iterable<A> a, Iterable<B> b, Iterable<C> c, A valueForNoneA, B valueForNoneB, C valueForNoneC, TriFunction<? super A,? super B,? super C,? extends R> zipFunction)
      Type Parameters:
      A -
      B -
      C -
      R -
      Parameters:
      a -
      b -
      c -
      valueForNoneA -
      valueForNoneB -
      valueForNoneC -
      zipFunction -
      Returns:
    • unzip

      public static <T, A, B> BiIterator<A,B> unzip(Iterator<? extends T> iter, BiConsumer<? super T,Pair<A,B>> unzip)
      Type Parameters:
      T -
      A -
      B -
      Parameters:
      iter -
      unzip - the second parameter is an output parameter.
      Returns:
      See Also:
    • unzip

      public static <T, A, B> BiIterator<A,B> unzip(Iterable<? extends T> c, BiConsumer<? super T,Pair<A,B>> unzip)
      Type Parameters:
      T -
      A -
      B -
      Parameters:
      c -
      unzip - the second parameter is an output parameter.
      Returns:
      See Also:
    • unzipp

      @Beta public static <T, A, B, C> TriIterator<A,B,C> unzipp(Iterator<? extends T> iter, BiConsumer<? super T,Triple<A,B,C>> unzip)
      Type Parameters:
      T -
      A -
      B -
      C -
      Parameters:
      iter -
      unzip - the second parameter is an output parameter.
      Returns:
      See Also:
    • unzipp

      @Beta public static <T, A, B, C> TriIterator<A,B,C> unzipp(Iterable<? extends T> c, BiConsumer<? super T,Triple<A,B,C>> unzip)
      Type Parameters:
      T -
      A -
      B -
      C -
      Parameters:
      c -
      unzip - the second parameter is an output parameter.
      Returns:
      See Also:
    • advance

      public static long advance(Iterator<?> iterator, long numberToAdvance)
      Note: copied from Google Guava under Apache license v2
      Calls next() on iterator, either numberToAdvance times or until hasNext() returns false, whichever comes first.
      Parameters:
      iterator -
      numberToAdvance -
      Returns:
    • skip

      public static <T> ObjIterator<T> skip(Iterator<? extends T> iter, long n)
      Calls next() on iterator, either n times or until hasNext() returns false, whichever comes first. This is a lazy evaluation operation. The skip action is only triggered when Iterator.hasNext() or Iterator.next() is called.
      Type Parameters:
      T -
      Parameters:
      iter -
      n -
      Returns:
    • limit

      public static <T> ObjIterator<T> limit(Iterator<? extends T> iter, long count)
      Returns a new Iterator.
      Type Parameters:
      T -
      Parameters:
      iter -
      count -
      Returns:
    • skipAndLimit

      public static <T> ObjIterator<T> skipAndLimit(Iterator<? extends T> iter, long offset, long count)
      Calls next() on iterator, either offset times or until hasNext() returns false, whichever comes first. This is a lazy evaluation operation. The skip action is only triggered when Iterator.hasNext() or Iterator.next() is called.
      Type Parameters:
      T -
      Parameters:
      iter -
      offset -
      count -
      Returns:
    • skipNull

      @Deprecated public static <T> ObjIterator<T> skipNull(Iterator<? extends T> iter)
      Deprecated.
      Use #skipNulls(Iterator<? extends T>) instead
      Returns a new ObjIterator with null elements removed.
      Type Parameters:
      T -
      Parameters:
      iter -
      Returns:
    • skipNulls

      public static <T> ObjIterator<T> skipNulls(Iterator<? extends T> iter)
      Returns a new ObjIterator with null elements removed.
      Type Parameters:
      T -
      Parameters:
      iter -
      Returns:
    • distinct

      public static <T> ObjIterator<T> distinct(Iterator<? extends T> iter)
      Type Parameters:
      T -
      Parameters:
      iter -
      Returns:
    • distinctBy

      public static <T> ObjIterator<T> distinctBy(Iterator<? extends T> iter, Function<? super T,?> keyMapper)
      Type Parameters:
      T -
      Parameters:
      iter -
      keyMapper -
      Returns:
    • filter

      public static <T> ObjIterator<T> filter(Iterator<? extends T> iter, Predicate<? super T> predicate)
      Type Parameters:
      T -
      Parameters:
      iter -
      predicate -
      Returns:
    • takeWhile

      public static <T> ObjIterator<T> takeWhile(Iterator<? extends T> iter, Predicate<? super T> predicate)
      Type Parameters:
      T -
      Parameters:
      iter -
      predicate -
      Returns:
    • takeWhileInclusive

      public static <T> ObjIterator<T> takeWhileInclusive(Iterator<? extends T> iter, Predicate<? super T> predicate)
      Type Parameters:
      T -
      Parameters:
      iter -
      predicate -
      Returns:
    • dropWhile

      public static <T> ObjIterator<T> dropWhile(Iterator<? extends T> iter, Predicate<? super T> predicate)
      Type Parameters:
      T -
      Parameters:
      iter -
      predicate -
      Returns:
    • skipUntil

      public static <T> ObjIterator<T> skipUntil(Iterator<? extends T> iter, Predicate<? super T> predicate)
      Type Parameters:
      T -
      Parameters:
      iter -
      predicate -
      Returns:
    • map

      public static <T, U> ObjIterator<U> map(Iterator<? extends T> iter, Function<? super T,U> mapper)
      Type Parameters:
      T -
      U -
      Parameters:
      iter -
      mapper -
      Returns:
    • flatMap

      public static <T, U> ObjIterator<U> flatMap(Iterator<? extends T> iter, Function<? super T,? extends Iterable<? extends U>> mapper)
      Type Parameters:
      T -
      U -
      Parameters:
      iter -
      mapper -
      Returns:
    • flatmap

      public static <T, U> ObjIterator<U> flatmap(Iterator<? extends T> iter, Function<? super T,? extends U[]> mapper)
      Type Parameters:
      T -
      U -
      Parameters:
      iter -
      mapper -
      Returns:
    • forEach

      public static <T, E extends Exception> void forEach(Iterator<? extends T> iter, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iter -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Iterator<? extends T> iter, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iter -
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2
    • forEach

      public static <T, E extends Exception> void forEach(Iterator<? extends T> iter, long offset, long count, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iter -
      offset -
      count -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Iterator<? extends T> iter, long offset, long count, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iter -
      offset -
      count -
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2
    • forEach

      public static <T, E extends Exception> void forEach(Iterator<? extends T> iter, long offset, long count, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iter -
      offset -
      count -
      processThreadNum -
      queueSize -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Iterator<? extends T> iter, long offset, long count, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Parse the elements in the specified iterators one by one.
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iter -
      offset -
      count -
      processThreadNum - new threads started to parse/process the lines/records
      queueSize - size of queue to save the processing records/lines loaded from source data. Default size is 1024.
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2
    • forEach

      public static <T, E extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iterators -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iterators -
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2
    • forEach

      public static <T, E extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, long offset, long count, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iterators -
      offset -
      count -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, long offset, long count, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iterators -
      offset -
      count -
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2
    • forEach

      public static <T, E extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, int readThreadNum, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iterators -
      readThreadNum -
      processThreadNum -
      queueSize -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, int readThreadNum, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iterators -
      readThreadNum -
      processThreadNum -
      queueSize -
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2
    • forEach

      public static <T, E extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, long offset, long count, int readThreadNum, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser) throws E
      Type Parameters:
      T -
      E -
      Parameters:
      iterators -
      offset -
      count -
      readThreadNum -
      processThreadNum -
      queueSize -
      elementParser -
      Throws:
      E - the e
    • forEach

      public static <T, E extends Exception, E2 extends Exception> void forEach(Collection<? extends Iterator<? extends T>> iterators, long offset, long count, int readThreadNum, int processThreadNum, int queueSize, Throwables.Consumer<? super T,E> elementParser, Throwables.Runnable<E2> onComplete) throws E, E2
      Parse the elements in the specified iterators one by one.
      Type Parameters:
      T -
      E -
      E2 -
      Parameters:
      iterators -
      offset -
      count -
      readThreadNum - new threads started to parse/process the lines/records
      processThreadNum - new threads started to parse/process the lines/records
      queueSize - size of queue to save the processing records/lines loaded from source data. Default size is 1024.
      elementParser -
      onComplete -
      Throws:
      E - the e
      E2 - the e2