AI-generated Key Takeaways
- 
          The Collectorsclass provides pre-built reduction operations for Java Streams to simplify data processing.
- 
          It offers methods for accumulating elements into collections like Lists and Sets, as well as Maps based on grouping or partitioning. 
- 
          It supports calculating summary statistics such as average, sum, count, min, and max for numeric stream elements. 
- 
          Collectors can be used to concatenate stream elements into strings using joining()with optional delimiters.
- 
          Methods like mapping()andcollectingAndThen()allow for customizing and chaining collector operations for complex data manipulations.
Implementations of Collector that implement various useful reduction
 operations, such as accumulating elements into collections, summarizing
 elements according to various criteria, etc.
 
The following are examples of using the predefined collectors to perform common mutable reduction tasks:
// Accumulate names into a List
     List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());
     // Accumulate names into a TreeSet
     Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
     // Convert elements to strings and concatenate them, separated by commas
     String joined = things.stream()
                           .map(Object::toString)
                           .collect(Collectors.joining(", "));
     // Compute sum of salaries of employee
     int total = employees.stream()
                          .collect(Collectors.summingInt(Employee::getSalary)));
     // Group employees by department
     Map<Department, List<Employee>> byDept
         = employees.stream()
                    .collect(Collectors.groupingBy(Employee::getDepartment));
     // Compute sum of salaries by department
     Map<Department, Integer> totalByDept
         = employees.stream()
                    .collect(Collectors.groupingBy(Employee::getDepartment,
                                                   Collectors.summingInt(Employee::getSalary)));
     // Partition students into passing and failing
     Map<Boolean, List<Student>> passingFailing =
         students.stream()
                 .collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
 Public Method Summary
| static <T> Collector<T, ?, Double> | 
                averagingDouble(ToDoubleFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the arithmetic mean of a double-valued
 function applied to the input elements. | 
| static <T> Collector<T, ?, Double> | 
                averagingInt(ToIntFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the arithmetic mean of an integer-valued
 function applied to the input elements. | 
| static <T> Collector<T, ?, Double> | 
                averagingLong(ToLongFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the arithmetic mean of a long-valued
 function applied to the input elements. | 
| static <T, A, R, RR> Collector<T, A, RR> | 
                collectingAndThen(Collector<T, A, R> downstream, Function<R, RR> finisher)
                
                 Adapts a  Collectorto perform an additional finishing
 transformation. | 
| static <T> Collector<T, ?, Long> | 
                counting()
                
                 Returns a  Collectoraccepting elements of typeTthat
 counts the number of input elements. | 
| static <T, K> Collector<T, ?, Map<K, List<T>>> | 
                groupingBy(Function<? super T, ? extends K> classifier)
                
                 Returns a  Collectorimplementing a "group by" operation on
 input elements of typeT, grouping elements according to a
 classification function, and returning the results in aMap. | 
| static <T, K, D, A, M extends Map<K, D>> Collector<T, ?, M> | 
                groupingBy(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
                
                 Returns a  Collectorimplementing a cascaded "group by" operation
 on input elements of typeT, grouping elements according to a
 classification function, and then performing a reduction operation on
 the values associated with a given key using the specified downstreamCollector. | 
| static <T, K, A, D> Collector<T, ?, Map<K, D>> | 
                groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
                
                 Returns a  Collectorimplementing a cascaded "group by" operation
 on input elements of typeT, grouping elements according to a
 classification function, and then performing a reduction operation on
 the values associated with a given key using the specified downstreamCollector. | 
| static <T, K, A, D> Collector<T, ?, ConcurrentMap<K, D>> | 
                groupingByConcurrent(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
                
                 Returns a concurrent  Collectorimplementing a cascaded "group by"
 operation on input elements of typeT, grouping elements
 according to a classification function, and then performing a reduction
 operation on the values associated with a given key using the specified
 downstreamCollector. | 
| static <T, K> Collector<T, ?, ConcurrentMap<K, List<T>>> | 
                groupingByConcurrent(Function<? super T, ? extends K> classifier)
                
                 Returns a concurrent  Collectorimplementing a "group by"
 operation on input elements of typeT, grouping elements
 according to a classification function. | 
| static <T, K, A, D, M extends ConcurrentMap<K, D>> Collector<T, ?, M> | 
                groupingByConcurrent(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
                
                 Returns a concurrent  Collectorimplementing a cascaded "group by"
 operation on input elements of typeT, grouping elements
 according to a classification function, and then performing a reduction
 operation on the values associated with a given key using the specified
 downstreamCollector. | 
| static Collector<CharSequence, ?, String> | 
                joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
                
                 Returns a  Collectorthat concatenates the input elements,
 separated by the specified delimiter, with the specified prefix and
 suffix, in encounter order. | 
| static Collector<CharSequence, ?, String> | 
                joining(CharSequence delimiter)
                
                 Returns a  Collectorthat concatenates the input elements,
 separated by the specified delimiter, in encounter order. | 
| static Collector<CharSequence, ?, String> | 
                joining()
                
                 Returns a  Collectorthat concatenates the input elements into aString, in encounter order. | 
| static <T, U, A, R> Collector<T, ?, R> | |
| static <T> Collector<T, ?, Optional<T>> | 
                maxBy(Comparator<? super T> comparator)
                
                 Returns a  Collectorthat produces the maximal element according
 to a givenComparator, described as anOptional<T>. | 
| static <T> Collector<T, ?, Optional<T>> | 
                minBy(Comparator<? super T> comparator)
                
                 Returns a  Collectorthat produces the minimal element according
 to a givenComparator, described as anOptional<T>. | 
| static <T> Collector<T, ?, Map<Boolean, List<T>>> | 
                partitioningBy(Predicate<? super T> predicate)
                
                 Returns a  Collectorwhich partitions the input elements according
 to aPredicate, and organizes them into aMap<Boolean, List<T>>. | 
| static <T, D, A> Collector<T, ?, Map<Boolean, D>> | 
                partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream)
                
                 Returns a  Collectorwhich partitions the input elements according
 to aPredicate, reduces the values in each partition according to
 anotherCollector, and organizes them into aMap<Boolean, D>whose values are the result of the downstream
 reduction. | 
| static <T> Collector<T, ?, Optional<T>> | 
                reducing(BinaryOperator<T> op)
                
                 Returns a  Collectorwhich performs a reduction of its
 input elements under a specifiedBinaryOperator. | 
| static <T, U> Collector<T, ?, U> | 
                reducing(U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op)
                
                 Returns a  Collectorwhich performs a reduction of its
 input elements under a specified mapping function andBinaryOperator. | 
| static <T> Collector<T, ?, T> | 
                reducing(T identity, BinaryOperator<T> op)
                
                 Returns a  Collectorwhich performs a reduction of its
 input elements under a specifiedBinaryOperatorusing the
 provided identity. | 
| static <T> Collector<T, ?, DoubleSummaryStatistics> | 
                summarizingDouble(ToDoubleFunction<? super T> mapper)
                
                 Returns a  Collectorwhich applies andouble-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values. | 
| static <T> Collector<T, ?, IntSummaryStatistics> | 
                summarizingInt(ToIntFunction<? super T> mapper)
                
                 Returns a  Collectorwhich applies anint-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values. | 
| static <T> Collector<T, ?, LongSummaryStatistics> | 
                summarizingLong(ToLongFunction<? super T> mapper)
                
                 Returns a  Collectorwhich applies anlong-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values. | 
| static <T> Collector<T, ?, Double> | 
                summingDouble(ToDoubleFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the sum of a double-valued
 function applied to the input elements. | 
| static <T> Collector<T, ?, Integer> | 
                summingInt(ToIntFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the sum of a integer-valued
 function applied to the input elements. | 
| static <T> Collector<T, ?, Long> | 
                summingLong(ToLongFunction<? super T> mapper)
                
                 Returns a  Collectorthat produces the sum of a long-valued
 function applied to the input elements. | 
| static <T, C extends Collection<T>> Collector<T, ?, C> | 
                toCollection(Supplier<C> collectionFactory)
                
                 Returns a  Collectorthat accumulates the input elements into a
 newCollection, in encounter order. | 
| static <T, K, U, M extends ConcurrentMap<K, U>> Collector<T, ?, M> | 
                toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
                
                 Returns a concurrent  Collectorthat accumulates elements into aConcurrentMapwhose keys and values are the result of applying
 the provided mapping functions to the input elements. | 
| static <T, K, U> Collector<T, ?, ConcurrentMap<K, U>> | 
                toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
                
                 Returns a concurrent  Collectorthat accumulates elements into aConcurrentMapwhose keys and values are the result of applying
 the provided mapping functions to the input elements. | 
| static <T, K, U> Collector<T, ?, ConcurrentMap<K, U>> | 
                toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
                
                 Returns a concurrent  Collectorthat accumulates elements into aConcurrentMapwhose keys and values are the result of applying
 the provided mapping functions to the input elements. | 
| static <T> Collector<T, ?, List<T>> | 
                toList()
                
                 Returns a  Collectorthat accumulates the input elements into a
 newList. | 
| static <T, K, U> Collector<T, ?, Map<K, U>> | 
                toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
                
                 Returns a  Collectorthat accumulates elements into aMapwhose keys and values are the result of applying the provided
 mapping functions to the input elements. | 
| static <T, K, U, M extends Map<K, U>> Collector<T, ?, M> | 
                toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
                
                 Returns a  Collectorthat accumulates elements into aMapwhose keys and values are the result of applying the provided
 mapping functions to the input elements. | 
| static <T, K, U> Collector<T, ?, Map<K, U>> | |
| static <T> Collector<T, ?, Set<T>> | 
                toSet()
                
                 Returns a  Collectorthat accumulates the input elements into a
 newSet. | 
Inherited Method Summary
Public Methods
public static Collector<T, ?, Double> averagingDouble (ToDoubleFunction<? super T> mapper)
Returns a Collector that produces the arithmetic mean of a double-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
 
The average returned can vary depending upon the order in which
 values are recorded, due to accumulated rounding error in
 addition of values of differing magnitudes. Values sorted by increasing
 absolute magnitude tend to yield more accurate results.  If any recorded
 value is a NaN or the sum is at any point a NaN then the
 average will be NaN.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, ?, Double> averagingInt (ToIntFunction<? super T> mapper)
Returns a Collector that produces the arithmetic mean of an integer-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, ?, Double> averagingLong (ToLongFunction<? super T> mapper)
Returns a Collector that produces the arithmetic mean of a long-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, A, RR> collectingAndThen (Collector<T, A, R> downstream, Function<R, RR> finisher)
Adapts a Collector to perform an additional finishing
 transformation.  For example, one could adapt the toList()
 collector to always produce an immutable list with:
 
List<String> people
         = people.stream().collect(collectingAndThen(toList(), Collections::unmodifiableList));
 Parameters
| downstream | a collector | 
|---|---|
| finisher | a function to be applied to the final result of the downstream collector | 
Returns
- a collector which performs the action of the downstream collector, followed by an additional finishing step
public static Collector<T, ?, Long> counting ()
Returns a Collector accepting elements of type T that
 counts the number of input elements.  If no elements are present, the
 result is 0.
Returns
- a Collectorthat counts the input elements
public static Collector<T, ?, Map<K, List<T>>> groupingBy (Function<? super T, ? extends K> classifier)
Returns a Collector implementing a "group by" operation on
 input elements of type T, grouping elements according to a
 classification function, and returning the results in a Map.
 
The classification function maps elements to some key type K.
 The collector produces a Map<K, List<T>> whose keys are the
 values resulting from applying the classification function to the input
 elements, and whose corresponding values are Lists containing the
 input elements which map to the associated key under the classification
 function.
 
There are no guarantees on the type, mutability, serializability, or
 thread-safety of the Map or List objects returned.
Parameters
| classifier | the classifier function mapping input elements to keys | 
|---|
Returns
- a Collectorimplementing the group-by operation
public static Collector<T, ?, M> groupingBy (Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
Returns a Collector implementing a cascaded "group by" operation
 on input elements of type T, grouping elements according to a
 classification function, and then performing a reduction operation on
 the values associated with a given key using the specified downstream
 Collector.  The Map produced by the Collector is created
 with the supplied factory function.
 
The classification function maps elements to some key type K.
 The downstream collector operates on elements of type T and
 produces a result of type D. The resulting collector produces a
 Map<K, D>.
 
For example, to compute the set of last names of people in each city, where the city names are sorted:
Map<City, Set<String>> namesByCity
         = people.stream().collect(groupingBy(Person::getCity, TreeMap::new,
                                              mapping(Person::getLastName, toSet())));
 Parameters
| classifier | a classifier function mapping input elements to keys | 
|---|---|
| mapFactory | a function which, when called, produces a new empty Mapof the desired type | 
| downstream | a Collectorimplementing the downstream reduction | 
Returns
- a Collectorimplementing the cascaded group-by operation
public static Collector<T, ?, Map<K, D>> groupingBy (Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Returns a Collector implementing a cascaded "group by" operation
 on input elements of type T, grouping elements according to a
 classification function, and then performing a reduction operation on
 the values associated with a given key using the specified downstream
 Collector.
 
The classification function maps elements to some key type K.
 The downstream collector operates on elements of type T and
 produces a result of type D. The resulting collector produces a
 Map<K, D>.
 
There are no guarantees on the type, mutability,
 serializability, or thread-safety of the Map returned.
 
For example, to compute the set of last names of people in each city:
Map<City, Set<String>> namesByCity
         = people.stream().collect(groupingBy(Person::getCity,
                                              mapping(Person::getLastName, toSet())));
 Parameters
| classifier | a classifier function mapping input elements to keys | 
|---|---|
| downstream | a Collectorimplementing the downstream reduction | 
Returns
- a Collectorimplementing the cascaded group-by operation
public static Collector<T, ?, ConcurrentMap<K, D>> groupingByConcurrent (Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Returns a concurrent Collector implementing a cascaded "group by"
 operation on input elements of type T, grouping elements
 according to a classification function, and then performing a reduction
 operation on the values associated with a given key using the specified
 downstream Collector.
 
This is a concurrent and
 unordered Collector.
 
The classification function maps elements to some key type K.
 The downstream collector operates on elements of type T and
 produces a result of type D. The resulting collector produces a
 Map<K, D>.
 
For example, to compute the set of last names of people in each city, where the city names are sorted:
ConcurrentMap<City, Set<String>> namesByCity
         = people.stream().collect(groupingByConcurrent(Person::getCity,
                                                        mapping(Person::getLastName, toSet())));
 Parameters
| classifier | a classifier function mapping input elements to keys | 
|---|---|
| downstream | a Collectorimplementing the downstream reduction | 
Returns
- a concurrent, unordered Collectorimplementing the cascaded group-by operation
public static Collector<T, ?, ConcurrentMap<K, List<T>>> groupingByConcurrent (Function<? super T, ? extends K> classifier)
Returns a concurrent Collector implementing a "group by"
 operation on input elements of type T, grouping elements
 according to a classification function.
 
This is a concurrent and
 unordered Collector.
 
The classification function maps elements to some key type K.
 The collector produces a ConcurrentMap<K, List<T>> whose keys are the
 values resulting from applying the classification function to the input
 elements, and whose corresponding values are Lists containing the
 input elements which map to the associated key under the classification
 function.
 
There are no guarantees on the type, mutability, or serializability
 of the Map or List objects returned, or of the
 thread-safety of the List objects returned.
Parameters
| classifier | a classifier function mapping input elements to keys | 
|---|
Returns
- a concurrent, unordered Collectorimplementing the group-by operation
public static Collector<T, ?, M> groupingByConcurrent (Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
Returns a concurrent Collector implementing a cascaded "group by"
 operation on input elements of type T, grouping elements
 according to a classification function, and then performing a reduction
 operation on the values associated with a given key using the specified
 downstream Collector.  The ConcurrentMap produced by the
 Collector is created with the supplied factory function.
 
This is a concurrent and
 unordered Collector.
 
The classification function maps elements to some key type K.
 The downstream collector operates on elements of type T and
 produces a result of type D. The resulting collector produces a
 Map<K, D>.
 
For example, to compute the set of last names of people in each city, where the city names are sorted:
ConcurrentMap<City, Set<String>> namesByCity
         = people.stream().collect(groupingBy(Person::getCity, ConcurrentSkipListMap::new,
                                              mapping(Person::getLastName, toSet())));
 Parameters
| classifier | a classifier function mapping input elements to keys | 
|---|---|
| mapFactory | a function which, when called, produces a new empty ConcurrentMapof the desired type | 
| downstream | a Collectorimplementing the downstream reduction | 
Returns
- a concurrent, unordered Collectorimplementing the cascaded group-by operation
public static Collector<CharSequence, ?, String> joining (CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Returns a Collector that concatenates the input elements,
 separated by the specified delimiter, with the specified prefix and
 suffix, in encounter order.
Parameters
| delimiter | the delimiter to be used between each element | 
|---|---|
| prefix | the sequence of characters to be used at the beginning of the joined result | 
| suffix | the sequence of characters to be used at the end of the joined result | 
Returns
- A Collectorwhich concatenates CharSequence elements, separated by the specified delimiter, in encounter order
public static Collector<CharSequence, ?, String> joining (CharSequence delimiter)
Returns a Collector that concatenates the input elements,
 separated by the specified delimiter, in encounter order.
Parameters
| delimiter | the delimiter to be used between each element | 
|---|
Returns
- A Collectorwhich concatenates CharSequence elements, separated by the specified delimiter, in encounter order
public static Collector<CharSequence, ?, String> joining ()
Returns a Collector that concatenates the input elements into a
 String, in encounter order.
Returns
- a Collectorthat concatenates the input elements into aString, in encounter order
public static Collector<T, ?, R> mapping (Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)
Adapts a Collector accepting elements of type U to one
 accepting elements of type T by applying a mapping function to
 each input element before accumulation.
Parameters
| mapper | a function to be applied to the input elements | 
|---|---|
| downstream | a collector which will accept mapped values | 
Returns
- a collector which applies the mapping function to the input elements and provides the mapped results to the downstream collector
public static Collector<T, ?, Optional<T>> maxBy (Comparator<? super T> comparator)
Returns a Collector that produces the maximal element according
 to a given Comparator, described as an Optional<T>.
Parameters
| comparator | a Comparatorfor comparing elements | 
|---|
Returns
- a Collectorthat produces the maximal value
public static Collector<T, ?, Optional<T>> minBy (Comparator<? super T> comparator)
Returns a Collector that produces the minimal element according
 to a given Comparator, described as an Optional<T>.
Parameters
| comparator | a Comparatorfor comparing elements | 
|---|
Returns
- a Collectorthat produces the minimal value
public static Collector<T, ?, Map<Boolean, List<T>>> partitioningBy (Predicate<? super T> predicate)
Returns a Collector which partitions the input elements according
 to a Predicate, and organizes them into a
 Map<Boolean, List<T>>.
 There are no guarantees on the type, mutability,
 serializability, or thread-safety of the Map returned.
Parameters
| predicate | a predicate used for classifying input elements | 
|---|
Returns
- a Collectorimplementing the partitioning operation
See Also
public static Collector<T, ?, Map<Boolean, D>> partitioningBy (Predicate<? super T> predicate, Collector<? super T, A, D> downstream)
Returns a Collector which partitions the input elements according
 to a Predicate, reduces the values in each partition according to
 another Collector, and organizes them into a
 Map<Boolean, D> whose values are the result of the downstream
 reduction.
 
There are no guarantees on the type, mutability,
 serializability, or thread-safety of the Map returned.
Parameters
| predicate | a predicate used for classifying input elements | 
|---|---|
| downstream | a Collectorimplementing the downstream
                   reduction | 
Returns
- a Collectorimplementing the cascaded partitioning operation
See Also
public static Collector<T, ?, Optional<T>> reducing (BinaryOperator<T> op)
Returns a Collector which performs a reduction of its
 input elements under a specified BinaryOperator.  The result
 is described as an Optional<T>.
Parameters
| op | a BinaryOperator<T>used to reduce the input elements | 
|---|
Returns
- a Collectorwhich implements the reduction operation
public static Collector<T, ?, U> reducing (U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op)
Returns a Collector which performs a reduction of its
 input elements under a specified mapping function and
 BinaryOperator. This is a generalization of
 reducing(Object, BinaryOperator) which allows a transformation
 of the elements before reduction.
Parameters
| identity | the identity value for the reduction (also, the value that is returned when there are no input elements) | 
|---|---|
| mapper | a mapping function to apply to each input value | 
| op | a BinaryOperator<U>used to reduce the mapped values | 
Returns
- a Collectorimplementing the map-reduce operation
public static Collector<T, ?, T> reducing (T identity, BinaryOperator<T> op)
Returns a Collector which performs a reduction of its
 input elements under a specified BinaryOperator using the
 provided identity.
Parameters
| identity | the identity value for the reduction (also, the value that is returned when there are no input elements) | 
|---|---|
| op | a BinaryOperator<T>used to reduce the input elements | 
Returns
- a Collectorwhich implements the reduction operation
public static Collector<T, ?, DoubleSummaryStatistics> summarizingDouble (ToDoubleFunction<? super T> mapper)
Returns a Collector which applies an double-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values.
Parameters
| mapper | a mapping function to apply to each element | 
|---|
Returns
- a Collectorimplementing the summary-statistics reduction
public static Collector<T, ?, IntSummaryStatistics> summarizingInt (ToIntFunction<? super T> mapper)
Returns a Collector which applies an int-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values.
Parameters
| mapper | a mapping function to apply to each element | 
|---|
Returns
- a Collectorimplementing the summary-statistics reduction
public static Collector<T, ?, LongSummaryStatistics> summarizingLong (ToLongFunction<? super T> mapper)
Returns a Collector which applies an long-producing
 mapping function to each input element, and returns summary statistics
 for the resulting values.
Parameters
| mapper | the mapping function to apply to each element | 
|---|
Returns
- a Collectorimplementing the summary-statistics reduction
public static Collector<T, ?, Double> summingDouble (ToDoubleFunction<? super T> mapper)
Returns a Collector that produces the sum of a double-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
 
The sum returned can vary depending upon the order in which
 values are recorded, due to accumulated rounding error in
 addition of values of differing magnitudes. Values sorted by increasing
 absolute magnitude tend to yield more accurate results.  If any recorded
 value is a NaN or the sum is at any point a NaN then the
 sum will be NaN.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, ?, Integer> summingInt (ToIntFunction<? super T> mapper)
Returns a Collector that produces the sum of a integer-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, ?, Long> summingLong (ToLongFunction<? super T> mapper)
Returns a Collector that produces the sum of a long-valued
 function applied to the input elements.  If no elements are present,
 the result is 0.
Parameters
| mapper | a function extracting the property to be summed | 
|---|
Returns
- a Collectorthat produces the sum of a derived property
public static Collector<T, ?, C> toCollection (Supplier<C> collectionFactory)
Returns a Collector that accumulates the input elements into a
 new Collection, in encounter order.  The Collection is
 created by the provided factory.
Parameters
| collectionFactory | a Supplierwhich returns a new, emptyCollectionof the appropriate type | 
|---|
Returns
- a Collectorwhich collects all the input elements into aCollection, in encounter order
public static Collector<T, ?, M> toConcurrentMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
Returns a concurrent Collector that accumulates elements into a
 ConcurrentMap whose keys and values are the result of applying
 the provided mapping functions to the input elements.
 
If the mapped keys contains duplicates (according to Object.equals(Object)),
 the value mapping function is applied to each equal element, and the
 results are merged using the provided merging function.  The
 ConcurrentMap is created by a provided supplier function.
 
This is a concurrent and
 unordered Collector.
Parameters
| keyMapper | a mapping function to produce keys | 
|---|---|
| valueMapper | a mapping function to produce values | 
| mergeFunction | a merge function, used to resolve collisions between
                      values associated with the same key, as supplied
                      to Map.merge(Object, Object, BiFunction) | 
| mapSupplier | a function which returns a new, empty Mapinto
                    which the results will be inserted | 
Returns
- a concurrent, unordered Collectorwhich collects elements into aConcurrentMapwhose keys are the result of applying a key mapping function to the input elements, and whose values are the result of applying a value mapping function to all input elements equal to the key and combining them using the merge function
public static Collector<T, ?, ConcurrentMap<K, U>> toConcurrentMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
Returns a concurrent Collector that accumulates elements into a
 ConcurrentMap whose keys and values are the result of applying
 the provided mapping functions to the input elements.
 
If the mapped keys contains duplicates (according to Object.equals(Object)),
 the value mapping function is applied to each equal element, and the
 results are merged using the provided merging function.
Parameters
| keyMapper | a mapping function to produce keys | 
|---|---|
| valueMapper | a mapping function to produce values | 
| mergeFunction | a merge function, used to resolve collisions between
                      values associated with the same key, as supplied
                      to Map.merge(Object, Object, BiFunction) | 
Returns
- a concurrent, unordered Collectorwhich collects elements into aConcurrentMapwhose keys are the result of applying a key mapping function to the input elements, and whose values are the result of applying a value mapping function to all input elements equal to the key and combining them using the merge function
public static Collector<T, ?, ConcurrentMap<K, U>> toConcurrentMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Returns a concurrent Collector that accumulates elements into a
 ConcurrentMap whose keys and values are the result of applying
 the provided mapping functions to the input elements.
 
If the mapped keys contains duplicates (according to
 Object.equals(Object)), an IllegalStateException is
 thrown when the collection operation is performed.  If the mapped keys
 may have duplicates, use
 toConcurrentMap(Function, Function, BinaryOperator) instead.
Parameters
| keyMapper | the mapping function to produce keys | 
|---|---|
| valueMapper | the mapping function to produce values | 
Returns
- a concurrent, unordered Collectorwhich collects elements into aConcurrentMapwhose keys are the result of applying a key mapping function to the input elements, and whose values are the result of applying a value mapping function to the input elements
public static Collector<T, ?, List<T>> toList ()
Returns a Collector that accumulates the input elements into a
 new List. There are no guarantees on the type, mutability,
 serializability, or thread-safety of the List returned; if more
 control over the returned List is required, use toCollection(Supplier).
Returns
- a Collectorwhich collects all the input elements into aList, in encounter order
public static Collector<T, ?, Map<K, U>> toMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
Returns a Collector that accumulates elements into a
 Map whose keys and values are the result of applying the provided
 mapping functions to the input elements.
 
If the mapped
 keys contains duplicates (according to Object.equals(Object)),
 the value mapping function is applied to each equal element, and the
 results are merged using the provided merging function.
Parameters
| keyMapper | a mapping function to produce keys | 
|---|---|
| valueMapper | a mapping function to produce values | 
| mergeFunction | a merge function, used to resolve collisions between
                      values associated with the same key, as supplied
                      to Map.merge(Object, Object, BiFunction) | 
Returns
- a Collectorwhich collects elements into aMapwhose keys are the result of applying a key mapping function to the input elements, and whose values are the result of applying a value mapping function to all input elements equal to the key and combining them using the merge function
public static Collector<T, ?, M> toMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
Returns a Collector that accumulates elements into a
 Map whose keys and values are the result of applying the provided
 mapping functions to the input elements.
 
If the mapped
 keys contains duplicates (according to Object.equals(Object)),
 the value mapping function is applied to each equal element, and the
 results are merged using the provided merging function.  The Map
 is created by a provided supplier function.
Parameters
| keyMapper | a mapping function to produce keys | 
|---|---|
| valueMapper | a mapping function to produce values | 
| mergeFunction | a merge function, used to resolve collisions between
                      values associated with the same key, as supplied
                      to Map.merge(Object, Object, BiFunction) | 
| mapSupplier | a function which returns a new, empty Mapinto
                    which the results will be inserted | 
Returns
- a Collectorwhich collects elements into aMapwhose keys are the result of applying a key mapping function to the input elements, and whose values are the result of applying a value mapping function to all input elements equal to the key and combining them using the merge function
public static Collector<T, ?, Map<K, U>> toMap (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Returns a Collector that accumulates elements into a
 Map whose keys and values are the result of applying the provided
 mapping functions to the input elements.
 
If the mapped keys contains duplicates (according to
 Object.equals(Object)), an IllegalStateException is
 thrown when the collection operation is performed.  If the mapped keys
 may have duplicates, use toMap(Function, Function, BinaryOperator)
 instead.
Parameters
| keyMapper | a mapping function to produce keys | 
|---|---|
| valueMapper | a mapping function to produce values | 
Returns
- a Collectorwhich collects elements into aMapwhose keys and values are the result of applying mapping functions to the input elements
public static Collector<T, ?, Set<T>> toSet ()
Returns a Collector that accumulates the input elements into a
 new Set. There are no guarantees on the type, mutability,
 serializability, or thread-safety of the Set returned; if more
 control over the returned Set is required, use
 toCollection(Supplier).
 
This is an unordered
 Collector.
Returns
- a Collectorwhich collects all the input elements into aSet
