Class 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 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 Detail

    • Method Detail

      • 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.

         Map<Integer, Object> chm = new ConcurrentHashMap<Integer, Object>();
         FJIterate.forEachWithIndex(collection, (each, index) -> chm.put(index, each));
         
      • 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.
         Map<Integer, Object> chm = new ConcurrentHashMap<Integer, Object>();
         FJIterate.forEachWithIndex(collection, (each, index) -> chm.put(index, each), 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)
      • 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.

         Map<Object, Boolean> chm = new ConcurrentHashMap<Object, Boolean>();
         FJIterate.forEach(collection, each -> chm.put(each, 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.

         Map<Object, Boolean> chm = new ConcurrentHashMap<Object, Boolean>();
         FJIterate.forEachBatchSize(collection, each -> chm.put(each, Boolean.TRUE), 100);
         
      • 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,
                                                                             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> 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.
      • 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)
      • 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,
                                               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)
      • 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,
                                                            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,
                                                          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)