Class FJIterate

java.lang.Object
org.eclipse.collections.impl.forkjoin.FJIterate

public final class FJIterate
extends Object
The FJIterate class contains several parallel algorithms that work with Collections and make use of Java's fork-join framework. All of the higher level parallel algorithms depend on the basic parallel algorithm named forEach. The forEach algorithm employs a batching fork and join approach.

All Collections that are not either a RandomAccess or List are first converted to a Java array using Iterate.toArray(Iterable), and then run with one of the FJIterate.forEach methods.

See Also:
ParallelIterate
  • Field Details

  • Method Details

    • forEachWithIndex

      public static <T> void forEachWithIndex​(Iterable<T> iterable, ObjectIntProcedure<? super T> procedure)
      Iterate over the collection specified, in parallel batches using default runtime parameter values. The ObjectIntProcedure used must be stateless, or use concurrent aware objects if they are to be shared.

      e.g.

       final ConcurrentMutableMap<Integer, Object> chm = new ConcurrentHashMap<Integer, Object>();
       FJIterate.forEachWithIndex(collection, new ObjectIntProcedure()
       {
           public void value(Object object, int index)
           {
               chm.put(index, object);
           }
       });
       
    • forEachWithIndex

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndex​(Iterable<T> iterable, PT procedure, ForkJoinPool executor)
      Iterate over the collection specified in parallel batches using the default runtime parameters. The ObjectIntProcedure used must be stateless, or use concurrent aware objects if they are to be shared. The code is executed against the specified executor.
      e.g.
       final ConcurrentMutableMap<Integer, Object> chm = new ConcurrentHashMap<Integer, Object>();
       FJIterate.forEachWithIndex(collection, new ObjectIntProcedure()
       {
           public void value(Object object, int index)
           {
               chm.put(index, object);
           }
       }, executor);
       
      Parameters:
      executor - Use this executor for all execution.
    • forEachWithIndex

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndex​(Iterable<T> iterable, PT procedure, int minForkSize, int taskCount)
      Iterate over the collection specified in parallel batches. The ObjectIntProcedure used must be stateless, or use concurrent aware objects if they are to be shared. The specified minimum fork size and task count are used instead of the default values.
      Parameters:
      minForkSize - Only run in parallel if input collection is longer than this.
      taskCount - The number of parallel tasks to submit to the executor.
      See Also:
      forEachWithIndex(Iterable, ObjectIntProcedure)
    • forEachWithIndex

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndex​(Iterable<T> iterable, ObjectIntProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, ForkJoinPool executor)
    • forEachWithIndex

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndex​(Iterable<T> iterable, ObjectIntProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount)
    • forEachWithIndex

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndex​(Iterable<T> iterable, ObjectIntProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount, ForkJoinPool executor)
    • forEachWithIndexInListOnExecutor

      public static <T,​ PT extends ObjectIntProcedure<? super T>> void forEachWithIndexInListOnExecutor​(List<T> list, ObjectIntProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount, ForkJoinPool executor)
    • forEach

      public static <T> void forEach​(Iterable<T> iterable, Procedure<? super T> procedure)
      Iterate over the collection specified in parallel batches using default runtime parameter values. The Procedure used must be stateless, or use concurrent aware objects if they are to be shared.

      e.g.

       final ConcurrentMutableMap<Object, Boolean> chm = new ConcurrentHashMap<Object, Boolean>();
       FJIterate.forEach(collection, new Procedure()
       {
           public void value(Object object)
           {
               chm.put(object, Boolean.TRUE);
           }
       });
       
    • forEach

      public static <T> void forEach​(Iterable<T> iterable, Procedure<? super T> procedure, int batchSize)
      Iterate over the collection specified in parallel batches using default runtime parameter values. The Procedure used must be stateless, or use concurrent aware objects if they are to be shared.

      e.g.

       final ConcurrentMutableMap<Object, Boolean> chm = new ConcurrentHashMap<Object, Boolean>();
       FJIterate.forEachBatchSize(collection, new Procedure()
       {
           public void value(Object object)
           {
               chm.put(object, Boolean.TRUE);
           }
       }, 100);
       
    • forEach

      public static <T> void forEach​(Iterable<T> iterable, Procedure<? super T> procedure, int batchSize, ForkJoinPool executor)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, PT procedure, ForkJoinPool executor)
      Iterate over the collection specified in parallel batches using default runtime parameter values and the specified executor. The Procedure used must be stateless, or use concurrent aware objects if they are to be shared.
      Parameters:
      executor - Use this executor for all execution.
      See Also:
      forEach(Iterable, Procedure)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, PT procedure, int minForkSize, int taskCount)
      Iterate over the collection specified in parallel batches using the specified minimum fork and task count sizes. The Procedure used must be stateless, or use concurrent aware objects if they are to be shared.
      Parameters:
      minForkSize - Only run in parallel if input collection is longer than this.
      taskCount - The number of parallel tasks to submit to the executor.
      See Also:
      forEach(Iterable, Procedure)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, PT procedure, int minForkSize, int taskCount, ForkJoinPool executor)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, ForkJoinPool executor)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int batchSize)
      Iterate over the collection specified in parallel batches using the default values for the task size. The ProcedureFactory can create stateful closures that will be collected and combined using the specified Combiner.
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> blockFactory, Combiner<PT> combiner, int batchSize, ForkJoinPool executor)
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount)
      Iterate over the collection specified in parallel batches using the default values for the task size. The ProcedureFactory can create stateful closures that will be collected and combined using the specified Combiner.
    • forEach

      public static <T,​ PT extends Procedure<? super T>> void forEach​(Iterable<T> iterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount, ForkJoinPool executor)
    • forEachInListOnExecutor

      public static <T,​ PT extends Procedure<? super T>> void forEachInListOnExecutor​(List<T> list, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount, ForkJoinPool executor)
    • forEachInBatchWithExecutor

      public static <T,​ PT extends Procedure<? super T>> void forEachInBatchWithExecutor​(BatchIterable<T> batchIterable, ProcedureFactory<PT> procedureFactory, Combiner<PT> combiner, int minForkSize, int taskCount, ForkJoinPool executor)
    • select

      public static <T> Collection<T> select​(Iterable<T> iterable, Predicate<? super T> predicate)
      Same effect as Iterate.select(Iterable, Predicate), but executed in parallel batches.
      Returns:
      The selected elements. The Collection will be of the same type as the input (List or Set) and will be in the same order as the input (if it is an ordered collection).
      See Also:
      select(Iterable, Predicate, boolean)
    • select

      public static <T> Collection<T> select​(Iterable<T> iterable, Predicate<? super T> predicate, boolean allowReorderedResult)
      Same effect as Iterate.select(Iterable, Predicate), but executed in parallel batches, and with a potentially reordered result.
      Parameters:
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The selected elements. The Collection will be of the same type (List or Set) as the input.
    • select

      public static <T,​ R extends Collection<T>> R select​(Iterable<T> iterable, Predicate<? super T> predicate, R target, boolean allowReorderedResult)
      Same effect as Iterate.select(Iterable, Predicate), but executed in parallel batches, and writing output into the specified collection.
      Parameters:
      target - Where to write the output.
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The 'target' collection, with the selected elements added.
    • select

      public static <T,​ R extends Collection<T>> R select​(Iterable<T> iterable, Predicate<? super T> predicate, R target, int batchSize, ForkJoinPool executor, boolean allowReorderedResult)
      Same effect as Iterate.select(Iterable, Predicate), but executed in parallel batches, and writing output into the specified collection.
      Parameters:
      target - Where to write the output.
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The 'target' collection, with the selected elements added.
    • reject

      public static <T> Collection<T> reject​(Iterable<T> iterable, Predicate<? super T> predicate)
      Same effect as Iterate.reject(Iterable, Predicate), but executed in parallel batches.
      Returns:
      The rejected elements. The Collection will be of the same type as the input (List or Set) and will be in the same order as the input (if it is an ordered collection).
      See Also:
      reject(Iterable, Predicate, boolean)
    • reject

      public static <T> Collection<T> reject​(Iterable<T> iterable, Predicate<? super T> predicate, boolean allowReorderedResult)
      Same effect as Iterate.reject(Iterable, Predicate), but executed in parallel batches, and with a potentially reordered result.
      Parameters:
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The rejected elements. The Collection will be of the same type (List or Set) as the input.
    • reject

      public static <T,​ R extends Collection<T>> R reject​(Iterable<T> iterable, Predicate<? super T> predicate, R target, boolean allowReorderedResult)
      Same effect as Iterate.reject(Iterable, Predicate), but executed in parallel batches, and writing output into the specified collection.
      Parameters:
      target - Where to write the output.
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The 'target' collection, with the rejected elements added.
    • reject

      public static <T,​ R extends Collection<T>> R reject​(Iterable<T> iterable, Predicate<? super T> predicate, R target, int batchSize, ForkJoinPool executor, boolean allowReorderedResult)
    • count

      public static <T> int count​(Iterable<T> iterable, Predicate<? super T> predicate)
      Same effect as Iterate.count(Iterable, Predicate), but executed in parallel batches.
      Returns:
      The number of elements which satisfy the Predicate.
    • count

      public static <T> int count​(Iterable<T> iterable, Predicate<? super T> predicate, int batchSize, ForkJoinPool executor)
      Same effect as Iterate.count(Iterable, Predicate), but executed in parallel batches.
      Returns:
      The number of elements which satisfy the Predicate.
    • collect

      public static <T,​ V> Collection<V> collect​(Iterable<T> iterable, Function<? super T,​V> function)
      Same effect as Iterate.collect(Iterable, Function), but executed in parallel batches.
      Returns:
      The collected elements. The Collection will be of the same type as the input (List or Set) and will be in the same order as the input (if it is an ordered collection).
      See Also:
      collect(Iterable, Function, boolean)
    • collect

      public static <T,​ V> Collection<V> collect​(Iterable<T> iterable, Function<? super T,​V> function, boolean allowReorderedResult)
      Same effect as Iterate.collect(Iterable, Function), but executed in parallel batches, and with potentially reordered result.
      Parameters:
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The collected elements. The Collection will be of the same type (List or Set) as the input.
    • collect

      public static <T,​ V,​ R extends Collection<V>> R collect​(Iterable<T> iterable, Function<? super T,​V> function, R target, boolean allowReorderedResult)
      Same effect as Iterate.collect(Iterable, Function), but executed in parallel batches, and writing output into the specified collection.
      Parameters:
      target - Where to write the output.
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The 'target' collection, with the collected elements added.
    • collect

      public static <T,​ V,​ R extends Collection<V>> R collect​(Iterable<T> iterable, Function<? super T,​V> function, R target, int batchSize, ForkJoinPool executor, boolean allowReorderedResult)
    • flatCollect

      public static <T,​ V> Collection<V> flatCollect​(Iterable<T> iterable, Function<? super T,​? extends Iterable<V>> function)
    • flatCollect

      public static <T,​ V> Collection<V> flatCollect​(Iterable<T> iterable, Function<? super T,​? extends Iterable<V>> function, boolean allowReorderedResult)
    • flatCollect

      public static <T,​ V,​ R extends Collection<V>> R flatCollect​(Iterable<T> iterable, Function<? super T,​? extends Iterable<V>> function, R target, boolean allowReorderedResult)
    • flatCollect

      public static <T,​ V,​ R extends Collection<V>> R flatCollect​(Iterable<T> iterable, Function<? super T,​? extends Iterable<V>> function, R target, int batchSize, ForkJoinPool executor, boolean allowReorderedResult)
    • collectIf

      public static <T,​ V> Collection<V> collectIf​(Iterable<T> iterable, Predicate<? super T> predicate, Function<? super T,​V> function)
      Same effect as Iterate.collectIf(Iterable, Predicate, Function), but executed in parallel batches.
      Returns:
      The collected elements. The Collection will be of the same type as the input (List or Set) and will be in the same order as the input (if it is an ordered collection).
      See Also:
      collectIf(Iterable, Predicate, Function, boolean)
    • collectIf

      public static <T,​ V> Collection<V> collectIf​(Iterable<T> iterable, Predicate<? super T> predicate, Function<? super T,​V> function, boolean allowReorderedResult)
      Same effect as Iterate.collectIf(Iterable, Predicate, Function), but executed in parallel batches, and with potentially reordered results.
      Parameters:
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The collected elements. The Collection will be of the same type as the input (List or Set)
    • collectIf

      public static <T,​ V,​ R extends Collection<V>> R collectIf​(Iterable<T> iterable, Predicate<? super T> predicate, Function<? super T,​V> function, R target, boolean allowReorderedResult)
      Same effect as Iterate.collectIf(Iterable, Predicate, Function), but executed in parallel batches, and writing output into the specified collection.
      Parameters:
      target - Where to write the output.
      allowReorderedResult - If the result can be in a different order. Allowing reordering may yield faster execution.
      Returns:
      The 'target' collection, with the collected elements added.
    • collectIf

      public static <T,​ V,​ R extends Collection<V>> R collectIf​(Iterable<T> iterable, Predicate<? super T> predicate, Function<? super T,​V> function, R target, int batchSize, ForkJoinPool executor, boolean allowReorderedResult)
    • aggregateBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator)
    • aggregateBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator, R mutableMap)
    • aggregateBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator, int batchSize)
    • aggregateBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator, R mutableMap, int batchSize)
    • aggregateBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator, int batchSize, ForkJoinPool executor)
    • aggregateBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Function2<? super V,​? super T,​? extends V> nonMutatingAggregator, R mutableMap, int batchSize, ForkJoinPool executor)
    • aggregateInPlaceBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator)
    • aggregateInPlaceBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator, R mutableMap)
    • aggregateInPlaceBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator, int batchSize)
    • aggregateInPlaceBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator, R mutableMap, int batchSize)
    • aggregateInPlaceBy

      public static <T,​ K,​ V> MutableMap<K,​V> aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator, int batchSize, ForkJoinPool executor)
    • aggregateInPlaceBy

      public static <T,​ K,​ V,​ R extends MutableMapIterable<K,​ V>> R aggregateInPlaceBy​(Iterable<T> iterable, Function<? super T,​? extends K> groupBy, Function0<? extends V> zeroValueFactory, Procedure2<? super V,​? super T> mutatingAggregator, R mutableMap, int batchSize, ForkJoinPool executor)
    • groupBy

      public static <K,​ V> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.
    • groupBy

      public static <K,​ V,​ R extends MutableMultimap<K,​ V>> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function, R concurrentMultimap)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.
    • groupBy

      public static <K,​ V,​ R extends MutableMultimap<K,​ V>> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function, R concurrentMultimap, int batchSize)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.
    • groupBy

      public static <K,​ V> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function, int batchSize)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.
    • groupBy

      public static <K,​ V> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function, int batchSize, ForkJoinPool executor)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.
    • groupBy

      public static <K,​ V,​ R extends MutableMultimap<K,​ V>> MutableMultimap<K,​V> groupBy​(Iterable<V> iterable, Function<? super V,​? extends K> function, R concurrentMultimap, int batchSize, ForkJoinPool executor)
      Same effect as Iterate.groupBy(Iterable, Function), but executed in parallel batches, and writing output into a SynchronizedPutFastListMultimap.