Spec-Zone.ru › OpenJDK 25

Класс Collectors

java.lang.Object
java.util.stream.Collectors
public final class Collectors extends Object
Реализации Collector, выполняющие различные полезные операции свёртки, например накопление элементов в коллекциях, суммирование элементов по различным критериям и т. д.

Ниже приведены примеры использования предопределённых коллекторов для выполнения распространённых задач изменяемой свёртки:

// 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));

Начиная с версии:
1.8

Краткое описание методов

Модификатор и тип Метод Описание
static <T> Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей значения типа double и применяемой к входным элементам.
static <T> Collector<T,?,Double> averagingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей значения типа int и применяемой к входным элементам.
static <T> Collector<T,?,Double> averagingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей значения типа long и применяемой к входным элементам.
static <T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
Адаптирует Collector для выполнения дополнительного завершающего преобразования.
static <T> Collector<T,?,Long> counting()
Возвращает Collector, принимающий элементы типа T и подсчитывающий количество входных элементов.
static <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> downstream)
Адаптирует Collector к приёму элементов того же типа T, применяя предикат к каждому входному элементу и накапливая элемент, только если предикат возвращает true.
static <T,U,A,R> Collector<T,?,R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream)
Адаптирует Collector, принимающий элементы типа U, к приёму элементов типа T, применяя функцию плоского отображения к каждому входному элементу перед накоплением.
static <T,K> Collector<T, ?, Map<K,List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
Возвращает Collector, реализующий операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, а результат возвращается в Map.
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)
Возвращает Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция свёртки с использованием указанного нижестоящего Collector.
static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Возвращает Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция свёртки с использованием указанного нижестоящего Collector.
static <T,K> Collector<T, ?, ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T, ? extends K> classifier)
Возвращает параллельный Collector, реализующий операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации.
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)
Возвращает параллельный Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция свёртки с использованием указанного нижестоящего Collector.
static <T,K,A,D> Collector<T, ?, ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Возвращает параллельный Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция свёртки с использованием указанного нижестоящего Collector.
static Collector<CharSequence, ?, String> joining()
Возвращает Collector, объединяющий входные элементы в String в порядке их следования.
static Collector<CharSequence, ?, String> joining(CharSequence delimiter)
Возвращает Collector, объединяющий входные элементы в порядке их следования и разделяющий их указанным разделителем.
static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Возвращает Collector, объединяющий входные элементы в порядке их следования, разделяющий их указанным разделителем и добавляющий заданные префикс и суффикс.
static <T,U,A,R> Collector<T,?,R> mapping(Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)
Адаптирует Collector, принимающий элементы типа U, к приёму элементов типа T, применяя функцию отображения к каждому входному элементу перед накоплением.
static <T> Collector<T, ?, Optional<T>> maxBy(Comparator<? super T> comparator)
Возвращает Collector, вычисляющий максимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.
static <T> Collector<T, ?, Optional<T>> minBy(Comparator<? super T> comparator)
Возвращает Collector, вычисляющий минимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.
static <T> Collector<T, ?, Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)
Возвращает Collector, разделяющий входные элементы согласно Predicate и помещающий их в Map<Boolean, List<T>>.
static <T,D,A> Collector<T, ?, Map<Boolean,D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream)
Возвращает Collector, разделяющий входные элементы согласно Predicate, сворачивающий значения в каждом разделе согласно другому Collector и помещающий их в Map<Boolean, D>, значениями которого являются результаты нижестоящей свёртки.
static <T> Collector<T, ?, Optional<T>> reducing(BinaryOperator<T> op)
Возвращает Collector, выполняющий свёртку входных элементов согласно указанному BinaryOperator.
static <T> Collector<T,?,T> reducing(T identity, BinaryOperator<T> op)
Возвращает Collector, выполняющий свёртку входных элементов согласно указанному BinaryOperator с использованием заданного нейтрального элемента.
static <T,U> Collector<T,?,U> reducing(U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op)
Возвращает Collector, выполняющий свёртку входных элементов с использованием заданной функции отображения и BinaryOperator.
static <T> Collector<T, ?, DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, применяющий к каждому входному элементу функцию отображения, возвращающую double, и возвращающий сводную статистику для полученных значений.
static <T> Collector<T, ?, IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, применяющий к каждому входному элементу функцию отображения, возвращающую int, и возвращающий сводную статистику для полученных значений.
static <T> Collector<T, ?, LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, применяющий к каждому входному элементу функцию отображения, возвращающую long, и возвращающий сводную статистику для полученных значений.
static <T> Collector<T,?,Double> summingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, вычисляющий сумму значений функции, возвращающей значения типа double и применяемой к входным элементам.
static <T> Collector<T,?,Integer> summingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, вычисляющий сумму значений функции, возвращающей значения типа int и применяемой к входным элементам.
static <T> Collector<T,?,Long> summingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, вычисляющий сумму значений функции, возвращающей значения типа long и применяемой к входным элементам.
static <T,R1,R2,R>
Collector<T,?,R>
teeing(Collector<? super T, ?, R1> downstream1, Collector<? super T, ?, R2> downstream2, BiFunction<? super R1, ? super R2, R> merger)
Возвращает Collector, представляющий собой комбинацию двух нижестоящих коллекторов.
static <T, C extends Collection<T>>
Collector<T,?,C>
toCollection(Supplier<C> collectionFactory)
Возвращает Collector, накапливающий входные элементы в новый Collection в порядке их следования.
static <T,K,U> Collector<T, ?, ConcurrentMap<K,U>> toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
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)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
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> mapFactory)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
static <T> Collector<T,?,List<T>> toList()
Возвращает Collector, накапливающий входные элементы в новый List.
static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
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)
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
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> mapFactory)
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого получаются в результате применения заданных функций отображения к входным элементам.
static <T> Collector<T,?,Set<T>> toSet()
Возвращает Collector, накапливающий входные элементы в новый Set.
static <T> Collector<T,?,List<T>> toUnmodifiableList()
Возвращает Collector, накапливающий входные элементы в неизменяемый список в порядке их следования.
static <T,K,U> Collector<T,?,Map<K,U>> toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает Collector, накапливающий входные элементы в неизменяемую карту, ключи и значения которой получаются в результате применения заданных функций отображения к входным элементам.
static <T,K,U> Collector<T,?,Map<K,U>> toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
Возвращает Collector, накапливающий входные элементы в неизменяемую карту, ключи и значения которой получаются в результате применения заданных функций отображения к входным элементам.
static <T> Collector<T,?,Set<T>> toUnmodifiableSet()
Возвращает Collector, накапливающий входные элементы в неизменяемое множество.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

toCollection

public static <T, C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)
Возвращает Collector, который накапливает входные элементы в новой Collection в порядке следования. Collection создаётся с помощью предоставленной фабрики.
Параметры типа:
T — тип входных элементов
C — тип результирующей Collection
Параметры:
collectionFactory — поставщик, предоставляющий новую пустую Collection, в которую будут добавлены результаты
Возвращает:
Collector, собирающий все входные элементы в Collection в порядке следования

toList

public static <T> Collector<T,?,List<T>> toList()
Возвращает Collector, который накапливает входные элементы в новом List. Тип, изменяемость, возможность сериализации и потокобезопасность возвращённого List не гарантируются; если требуется больший контроль над возвращённым List, используйте toCollection(Supplier).
Параметры типа:
T — тип входных элементов
Возвращает:
Collector, собирающий все входные элементы в List в порядке следования

toUnmodifiableList

public static <T> Collector<T,?,List<T>> toUnmodifiableList()
Возвращает Collector, который накапливает входные элементы в неизменяемый List в порядке следования. Возвращаемый Collector не допускает значения null и выбрасывает NullPointerException, если ему передано значение null.
Параметры типа:
T — тип входных элементов
Возвращает:
Collector, накапливающий входные элементы в неизменяемый List в порядке следования
С версии:
10

toSet

public static <T> Collector<T,?,Set<T>> toSet()
Возвращает Collector, который накапливает входные элементы в новом Set. Тип, изменяемость, возможность сериализации и потокобезопасность возвращённого Set не гарантируются; если требуется больший контроль над возвращённым Set, используйте toCollection(Supplier).

Этот коллектор имеет характеристику unordered.

Параметры типа:
T — тип входных элементов
Возвращает:
Collector, собирающий все входные элементы в Set

toUnmodifiableSet

public static <T> Collector<T,?,Set<T>> toUnmodifiableSet()
Возвращает Collector, который накапливает входные элементы в неизменяемый Set. Возвращаемый Collector не допускает значения null и выбрасывает NullPointerException, если ему передано значение null. Если входные данные содержат повторяющиеся элементы, сохраняется произвольный элемент из группы дубликатов.

Этот коллектор имеет характеристику unordered.

Параметры типа:
T — тип входных элементов
Возвращает:
Collector, накапливающий входные элементы в неизменяемый Set
С версии:
10

joining

public static Collector<CharSequence, ?, String> joining()
Возвращает Collector, который объединяет входные элементы в String в порядке следования.
Возвращает:
Collector, объединяющий входные элементы в String в порядке следования

joining

public static Collector<CharSequence, ?, String> joining(CharSequence delimiter)
Возвращает Collector, который объединяет входные элементы в порядке следования, разделяя их указанным разделителем.
Параметры:
delimiter — разделитель, используемый между элементами
Возвращает:
Collector, объединяющий элементы CharSequence в порядке следования и разделяющий их указанным разделителем

joining

public static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Возвращает Collector, который объединяет входные элементы в порядке следования, разделяя их указанным разделителем и добавляя указанные префикс и суффикс.
Параметры:
delimiter — разделитель, используемый между элементами
prefix — последовательность символов, добавляемая в начало объединённого результата
suffix — последовательность символов, добавляемая в конец объединённого результата
Возвращает:
Collector, объединяющий элементы CharSequence в порядке следования и разделяющий их указанным разделителем

mapping

public static <T,U,A,R> Collector<T,?,R> mapping(Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)
Адаптирует Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию отображения к каждому входному элементу перед накоплением.
Примечание API:
Коллекторы mapping() наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора для groupingBy или partitioningBy. Например, для потока Person, чтобы накопить набор фамилий жителей каждого города:
Map<City, Set<String>> lastNamesByCity
  = people.stream().collect(
    groupingBy(Person::getCity,
               mapping(Person::getLastName,
                       toSet())));
Параметры типа:
T — тип входных элементов
U — тип элементов, принимаемых последующим коллектором
A — промежуточный тип накопления последующего коллектора
R — тип результата коллектора
Параметры:
mapper — функция, применяемая к входным элементам
downstream — коллектор, принимающий отображённые значения
Возвращает:
коллектор, применяющий функцию отображения к входным элементам и передающий полученные значения последующему коллектору

flatMapping

public static <T,U,A,R> Collector<T,?,R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream)
Адаптирует Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию плоского отображения к каждому входному элементу перед накоплением. Функция плоского отображения преобразует входной элемент в stream, содержащий ноль или более выходных элементов, которые затем накапливаются последующим коллектором. Каждый отображённый поток closed после передачи его элементов последующему коллектору. (Если отображённый поток null, вместо него используется пустой поток.)
Примечание API:
Коллекторы flatMapping() наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора для groupingBy или partitioningBy. Например, для потока Order, чтобы накопить набор позиций заказа каждого клиента:
Map<String, Set<LineItem>> itemsByCustomerName
  = orders.stream().collect(
    groupingBy(Order::getCustomerName,
               flatMapping(order -> order.getLineItems().stream(),
                           toSet())));
Параметры типа:
T — тип входных элементов
U — тип элементов, принимаемых последующим коллектором
A — промежуточный тип накопления последующего коллектора
R — тип результата коллектора
Параметры:
mapper — функция, применяемая к входным элементам и возвращающая поток результатов
downstream — коллектор, принимающий элементы потока, возвращённого mapper
Возвращает:
коллектор, применяющий функцию отображения к входным элементам и передающий результаты плоского отображения последующему коллектору
С версии:
9

filtering

public static <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> downstream)
Адаптирует Collector для приёма элементов того же типа T, применяя предикат к каждому входному элементу и накапливая элемент, только если предикат возвращает true.
Примечание API:
Коллекторы filtering() наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора для groupingBy или partitioningBy. Например, для потока Employee, чтобы накопить сотрудников каждого отдела, чья зарплата превышает заданный порог:
Map<Department, Set<Employee>> wellPaidEmployeesByDepartment
  = employees.stream().collect(
    groupingBy(Employee::getDepartment,
               filtering(e -> e.getSalary() > 2000,
                         toSet())));
Коллектор фильтрации отличается от операции filter() потока. Предположим, в этом примере в некотором отделе нет сотрудников, чья зарплата превышает порог. Использование показанного выше коллектора фильтрации приведёт к тому, что этот отдел будет сопоставлен с пустым Set. Если вместо этого выполнить операцию filter() потока, для этого отдела соответствия не будет.
Параметры типа:
T — тип входных элементов
A — промежуточный тип накопления последующего коллектора
R — тип результата коллектора
Параметры:
predicate — предикат, применяемый к входным элементам
downstream — коллектор, принимающий значения, соответствующие предикату
Возвращает:
коллектор, применяющий предикат к входным элементам и передающий соответствующие ему элементы последующему коллектору
С версии:
9

collectingAndThen

public static <T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
Адаптирует Collector для выполнения дополнительного преобразования на завершающем этапе. Например, можно адаптировать коллектор toList(), чтобы он всегда создавал неизменяемый список:
List<String> list = people.stream().collect(
  collectingAndThen(toList(),
                    Collections::unmodifiableList));
Параметры типа:
T — тип входных элементов
A — промежуточный тип накопления последующего коллектора
R — тип результата последующего коллектора
RR — тип результата результирующего коллектора
Параметры:
downstream — коллектор
finisher — функция, применяемая к конечному результату последующего коллектора
Возвращает:
коллектор, выполняющий действие последующего коллектора, а затем дополнительный завершающий этап

counting

public static <T> Collector<T,?,Long> counting()
Возвращает Collector, принимающий элементы типа T и подсчитывающий количество входных элементов. Если элементов нет, результат равен 0.
Требования к реализации:
Результат эквивалентен следующему:
    reducing(0L, e -> 1L, Long::sum)
Параметры типа:
T — тип входных элементов
Возвращает:
Collector, подсчитывающий входные элементы

minBy

public static <T> Collector<T, ?, Optional<T>> minBy(Comparator<? super T> comparator)
Возвращает Collector, который находит минимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.
Требования к реализации:
Результат эквивалентен следующему:
    reducing(BinaryOperator.minBy(comparator))
Параметры типа:
T — тип входных элементов
Параметры:
comparator — Comparator для сравнения элементов
Возвращает:
Collector, возвращающий минимальное значение

maxBy

public static <T> Collector<T, ?, Optional<T>> maxBy(Comparator<? super T> comparator)
Возвращает Collector, который находит максимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.
Требования к реализации:
Результат эквивалентен следующему:
    reducing(BinaryOperator.maxBy(comparator))
Параметры типа:
T — тип входных элементов
Параметры:
comparator — Comparator для сравнения элементов
Возвращает:
Collector, возвращающий максимальное значение

summingInt

public static <T> Collector<T,?,Integer> summingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, который вычисляет сумму значений целочисленной функции, применённой к входным элементам. Если элементов нет, результат равен 0.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая суммируемое свойство
Возвращает:
Collector, вычисляющий сумму производного свойства

summingLong

public static <T> Collector<T,?,Long> summingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, который вычисляет сумму значений функции типа long, применённой к входным элементам. Если элементов нет, результат равен 0.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая суммируемое свойство
Возвращает:
Collector, вычисляющий сумму производного свойства

summingDouble

public static <T> Collector<T,?,Double> summingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, который вычисляет сумму значений функции типа double, применённой к входным элементам. Если элементов нет, результат равен 0.

Возвращаемая сумма может зависеть от порядка обработки значений из-за накопления ошибок округления при сложении значений разных порядков величины. Сортировка значений по возрастанию абсолютной величины обычно повышает точность результата. Если какое-либо обработанное значение является NaN или сумма в какой-либо момент становится NaN, итоговая сумма будет NaN.

Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая суммируемое свойство
Возвращает:
Collector, вычисляющий сумму производного свойства

averagingInt

public static <T> Collector<T,?,Double> averagingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, который вычисляет среднее арифметическое значений целочисленной функции, применённой к входным элементам. Если элементов нет, результат равен 0.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая усредняемое свойство
Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства

averagingLong

public static <T> Collector<T,?,Double> averagingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, который вычисляет среднее арифметическое значений функции типа long, применённой к входным элементам. Если элементов нет, результат равен 0.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая усредняемое свойство
Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства

averagingDouble

public static <T> Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, который вычисляет среднее арифметическое значений функции типа double, применённой к входным элементам. Если элементов нет, результат равен 0.

Возвращаемое среднее может зависеть от порядка обработки значений из-за накопления ошибок округления при сложении значений разных порядков величины. Сортировка значений по возрастанию абсолютной величины обычно повышает точность результата. Если какое-либо обработанное значение является NaN или сумма в какой-либо момент становится NaN, итоговое среднее будет NaN.

Примечание по реализации:
Формат double позволяет представить все последовательные целые числа в диапазоне от -253 до 253. Если конвейер содержит более 253 значений, делитель при вычислении среднего будет ограничен значением 253, что приведёт к дополнительным численным ошибкам.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция, извлекающая усредняемое свойство
Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства

reducing

public static <T> Collector<T,?,T> reducing(T identity, BinaryOperator<T> op)
Возвращает Collector, выполняющий свёртывание входных элементов с помощью заданного BinaryOperator и указанного начального значения.
Примечание API:
Коллекторы reducing() наиболее полезны при использовании в многоуровневом свёртывании, после groupingBy или partitioningBy. Для простого свёртывания потока используйте вместо этого Stream.reduce(Object, BinaryOperator).
Параметры типа:
T — тип элементов на входе и выходе свёртывания
Параметры:
identity — начальное значение свёртывания (оно же значение, возвращаемое при отсутствии входных элементов)
op — BinaryOperator<T>, используемый для свёртывания входных элементов
Возвращает:
Collector, реализующий операцию свёртывания
См. также:
  • reducing(BinaryOperator)
  • reducing(Object, Function, BinaryOperator)

reducing

public static <T> Collector<T, ?, Optional<T>> reducing(BinaryOperator<T> op)
Возвращает Collector, выполняющий свёртывание входных элементов с помощью заданного BinaryOperator. Результат представлен как Optional<T>.
Примечание API:
Коллекторы reducing() наиболее полезны при использовании в многоуровневом свёртывании, после groupingBy или partitioningBy. Для простого свёртывания потока используйте вместо этого Stream.reduce(BinaryOperator).

Например, для потока Person можно вычислить самого высокого человека в каждом городе:

Comparator<Person> byHeight = Comparator.comparing(Person::getHeight);
Map<City, Optional<Person>> tallestByCity
  = people.stream().collect(
    groupingBy(Person::getCity,
               reducing(BinaryOperator.maxBy(byHeight))));
Параметры типа:
T — тип элементов на входе и выходе свёртывания
Параметры:
op — BinaryOperator<T>, используемый для свёртывания входных элементов
Возвращает:
Collector, реализующий операцию свёртывания
См. также:
  • reducing(Object, BinaryOperator)
  • reducing(Object, Function, BinaryOperator)

reducing

public static <T,U> Collector<T,?,U> reducing(U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op)
Возвращает Collector, выполняющий свёртывание входных элементов с помощью заданной функции отображения и BinaryOperator. Это обобщение метода reducing(Object, BinaryOperator), позволяющее преобразовывать элементы перед свёртыванием.
Примечание API:
Коллекторы reducing() наиболее полезны при использовании в многоуровневом свёртывании, после groupingBy или partitioningBy. Для простого отображения с последующим свёртыванием потока используйте вместо этого Stream.map(Function) и Stream.reduce(Object, BinaryOperator).

Например, для потока Person можно определить самую длинную фамилию жителей каждого города:

Comparator<String> byLength = Comparator.comparing(String::length);
Map<City, String> longestLastNameByCity
  = people.stream().collect(
    groupingBy(Person::getCity,
               reducing("",
                        Person::getLastName,
                        BinaryOperator.maxBy(byLength))));
Параметры типа:
T — тип входных элементов
U — тип отображённых значений
Параметры:
identity — начальное значение свёртывания (оно же значение, возвращаемое при отсутствии входных элементов)
mapper — функция отображения, применяемая к каждому входному значению
op — BinaryOperator<U>, используемый для свёртывания отображённых значений
Возвращает:
Collector, реализующий операцию отображения с последующим свёртыванием
См. также:
  • reducing(Object, BinaryOperator)
  • reducing(BinaryOperator)

groupingBy

public static <T,K> Collector<T, ?, Map<K,List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
Возвращает Collector, реализующий операцию группировки входных элементов типа T по классифицирующей функции и возвращающий результаты в Map.

Классифицирующая функция сопоставляет элементы ключам некоторого типа K. Коллектор создаёт Map<K, List<T>>, ключами которого являются значения, полученные при применении классифицирующей функции к входным элементам, а соответствующими значениями — List, содержащие входные элементы, сопоставленные с соответствующим ключом этой функцией.

Тип, изменяемость, возможность сериализации и потокобезопасность возвращаемых объектов Map и List не гарантируются.

Требования к реализации:
Результат аналогичен следующему:
    groupingBy(classifier, toList());
Примечание по реализации:
Возвращаемый Collector не является конкурентным. В конвейерах параллельных потоков функция combiner объединяет ключи одной карты с другой, что может быть затратной операцией. Если сохранять порядок элементов в результирующем коллекторе Map не требуется, использование groupingByConcurrent(Function) может повысить производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — тип ключей
Параметры:
classifier — функция классификации, сопоставляющая входные элементы ключам
Возвращает:
Collector, реализующий операцию группировки
См. также:
  • groupingBy(Function, Collector)
  • groupingBy(Function, Supplier, Collector)
  • groupingByConcurrent(Function)

groupingBy

public static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Возвращает Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector.

Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает Map<K, D>.

Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.

Например, чтобы вычислить множество фамилий людей в каждом городе:

Map<City, Set<String>> namesByCity
  = people.stream().collect(
    groupingBy(Person::getCity,
               mapping(Person::getLastName,
                       toSet())));
Примечание по реализации:
Возвращаемый Collector не является конкурентным. В конвейерах параллельных потоков функция combiner выполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если сохранять порядок передачи элементов последующему коллектору не требуется, использование groupingByConcurrent(Function, Collector) может обеспечить более высокую производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — тип ключей
A — промежуточный тип накопления последующего коллектора
D — тип результата последующей редукции
Параметры:
classifier — функция-классификатор, сопоставляющая входным элементам ключи
downstream — Collector, реализующий последующую редукцию
Возвращает:
Collector, реализующий каскадную операцию группировки
См. также:
  • groupingBy(Function)
  • groupingBy(Function, Supplier, Collector)
  • groupingByConcurrent(Function, Collector)

groupingBy

public 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)
Возвращает Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. Map, создаваемый коллектором, создается с помощью предоставленной функции-фабрики.

Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает Map<K, D>.

Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:

Map<City, Set<String>> namesByCity
  = people.stream().collect(
    groupingBy(Person::getCity,
               TreeMap::new,
               mapping(Person::getLastName,
                       toSet())));
Примечание по реализации:
Возвращаемый Collector не является конкурентным. В конвейерах параллельных потоков функция combiner выполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если сохранять порядок передачи элементов последующему коллектору не требуется, использование groupingByConcurrent(Function, Supplier, Collector) может обеспечить более высокую производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — тип ключей
D — тип результата последующей редукции
A — промежуточный тип накопления последующего коллектора
M — тип результирующего Map
Параметры:
classifier — функция-классификатор, сопоставляющая входным элементам ключи
mapFactory — поставщик нового пустого Map, в который будут помещены результаты
downstream — Collector, реализующий последующую редукцию
Возвращает:
Collector, реализующий каскадную операцию группировки
См. также:
  • groupingBy(Function, Collector)
  • groupingBy(Function)
  • groupingByConcurrent(Function, Supplier, Collector)

groupingByConcurrent

public static <T,K> Collector<T, ?, ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T, ? extends K> classifier)
Возвращает конкурентный Collector, реализующий операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации.

Это коллектор с характеристиками concurrent и unordered.

Функция классификации сопоставляет элементам ключ некоторого типа K. Коллектор создает ConcurrentMap<K, List<T>>, ключами которой являются значения, полученные при применении функции классификации к входным элементам, а соответствующие значения — это Listы, содержащие входные элементы, сопоставленные связанному ключу функцией классификации.

Тип, изменяемость и сериализуемость возвращаемых объектов ConcurrentMap или List, а также потокобезопасность возвращаемых объектов List не гарантируются.

Требования к реализации:
Результат аналогичен следующему:
    groupingByConcurrent(classifier, toList());
Параметры типа:
T — тип входных элементов
K — тип ключей
Параметры:
classifier — функция-классификатор, сопоставляющая входным элементам ключи
Возвращает:
конкурентный неупорядоченный Collector, реализующий операцию группировки
См. также:
  • groupingBy(Function)
  • groupingByConcurrent(Function, Collector)
  • groupingByConcurrent(Function, Supplier, Collector)

groupingByConcurrent

public static <T,K,A,D> Collector<T, ?, ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Возвращает конкурентный Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector.

Это коллектор с характеристиками concurrent и unordered.

Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает ConcurrentMap<K, D>.

Тип, изменяемость и сериализуемость возвращаемого ConcurrentMap не гарантируются.

Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:

ConcurrentMap<City, Set<String>> namesByCity
  = people.stream().collect(
    groupingByConcurrent(Person::getCity,
                         mapping(Person::getLastName,
                                 toSet())));
Параметры типа:
T — тип входных элементов
K — тип ключей
A — промежуточный тип накопления последующего коллектора
D — тип результата последующей редукции
Параметры:
classifier — функция-классификатор, сопоставляющая входным элементам ключи
downstream — Collector, реализующий последующую редукцию
Возвращает:
конкурентный неупорядоченный Collector, реализующий каскадную операцию группировки
См. также:
  • groupingBy(Function, Collector)
  • groupingByConcurrent(Function)
  • groupingByConcurrent(Function, Supplier, Collector)

groupingByConcurrent

public 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)
Возвращает конкурентный Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. ConcurrentMap, создаваемый коллектором, создается с помощью предоставленной функции-фабрики.

Это коллектор с характеристиками concurrent и unordered.

Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает ConcurrentMap<K, D>.

Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:

ConcurrentMap<City, Set<String>> namesByCity
  = people.stream().collect(
    groupingByConcurrent(Person::getCity,
                         ConcurrentSkipListMap::new,
                         mapping(Person::getLastName,
                                 toSet())));
Параметры типа:
T — тип входных элементов
K — тип ключей
A — промежуточный тип накопления последующего коллектора
D — тип результата последующей редукции
M — тип результирующего ConcurrentMap
Параметры:
classifier — функция-классификатор, сопоставляющая входным элементам ключи
mapFactory — поставщик нового пустого ConcurrentMap, в который будут помещены результаты
downstream — Collector, реализующий последующую редукцию
Возвращает:
конкурентный неупорядоченный Collector, реализующий каскадную операцию группировки
См. также:
  • groupingByConcurrent(Function)
  • groupingByConcurrent(Function, Collector)
  • groupingBy(Function, Supplier, Collector)

partitioningBy

public static <T> Collector<T, ?, Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)
Возвращает Collector, который разделяет входные элементы согласно Predicate и организует их в Map<Boolean, List<T>>. Возвращаемый Map всегда содержит отображения для обоих ключей — false и true. Тип, изменяемость, сериализуемость и потокобезопасность возвращаемых Map или List не гарантируются.
Примечание к API:
Если раздел не содержит элементов, его значением в результирующей Map будет пустой List.
Параметры типа:
T — тип входных элементов
Параметры:
predicate — предикат, используемый для классификации входных элементов
Возвращает:
Collector, реализующий операцию разделения
См. также:
  • partitioningBy(Predicate, Collector)

partitioningBy

public static <T,D,A> Collector<T, ?, Map<Boolean,D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream)
Возвращает Collector, который разделяет входные элементы согласно Predicate, редуцирует значения в каждом разделе с помощью другого Collector и организует их в Map<Boolean, D>, значения которого являются результатами последующей редукции.

Возвращаемый Map всегда содержит отображения для обоих ключей — false и true. Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.

Примечание к API:
Если раздел не содержит элементов, его значение в результирующей Map будет получено вызовом функции-поставщика последующего коллектора с последующим применением функции-финишера.
Параметры типа:
T — тип входных элементов
D — тип результата последующей редукции
A — промежуточный тип накопления последующего коллектора
Параметры:
predicate — предикат, используемый для классификации входных элементов
downstream — Collector, реализующий последующую редукцию
Возвращает:
Collector, реализующий каскадную операцию разделения
См. также:
  • partitioningBy(Predicate)

toMap

public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает Collector, который собирает элементы в Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам.

Если среди отображенных ключей есть дубликаты (согласно Object.equals(Object)), при выполнении операции сбора выбрасывается IllegalStateException. Если возможны дубликаты отображенных ключей, вместо этого используйте toMap(Function, Function, BinaryOperator).

Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.

Примечание к API:
Часто входные элементы используются в качестве ключа или значения. В этом случае может пригодиться вспомогательный метод Function.identity(). Например, следующий код создает Map, сопоставляющую студентам их средний балл:
Map<Student, Double> studentToGPA
  = students.stream().collect(
    toMap(Function.identity(),
          student -> computeGPA(student)));
А следующий код создает Map, сопоставляющую уникальный идентификатор студентам:
Map<String, Student> studentIdToStudent
  = students.stream().collect(
    toMap(Student::getId,
          Function.identity()));
Примечание по реализации:
Возвращаемый Collector не является конкурентным. В конвейерах параллельных потоков функция combiner выполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если не требуется, чтобы результаты добавлялись в Map в порядке встречи, использование toConcurrentMap(Function, Function) может обеспечить более высокую производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключа
U — выходной тип функции отображения значения
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
Возвращает:
Collector, собирающий элементы в Map, ключи и значения которой являются результатами применения функций отображения к входным элементам
См. также:
  • toMap(Function, Function, BinaryOperator)
  • toMap(Function, Function, BinaryOperator, Supplier)
  • toConcurrentMap(Function, Function)

toUnmodifiableMap

public static <T,K,U> Collector<T,?,Map<K,U>> toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает Collector, который собирает входные элементы в неизменяемую Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам.

Если среди отображенных ключей есть дубликаты (согласно Object.equals(Object)), при выполнении операции сбора выбрасывается IllegalStateException. Если возможны дубликаты отображенных ключей, используйте toUnmodifiableMap(Function, Function, BinaryOperator) для обработки слияния значений.

Возвращаемый коллектор не допускает null в качестве ключей и значений. Если одна из функций отображения возвращает null, будет выброшено NullPointerException.

Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключа
U — выходной тип функции отображения значения
Параметры:
keyMapper — функция отображения для получения ключей; не должна быть null
valueMapper — функция отображения для получения значений; не должна быть null
Возвращает:
Collector, который собирает входные элементы в неизменяемую Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам
Выбрасывает:
NullPointerException — если keyMapper или valueMapper равен null
Начиная с версии:
10
См. также:
  • toUnmodifiableMap(Function, Function, BinaryOperator)

toMap

public 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)
Возвращает Collector, который собирает элементы в Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам.

Если среди отображенных ключей есть дубликаты (согласно Object.equals(Object)), функция отображения значения применяется к каждому равному элементу, а полученные результаты объединяются с помощью предоставленной функции слияния.

Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.

Примечание к API:
Существует несколько способов обработать ситуацию, когда несколько элементов отображаются в один и тот же ключ. В других вариантах toMap просто используется функция слияния, которая всегда выбрасывает исключение, но можно легко задать более гибкие правила слияния. Например, если у вас есть поток Person и вы хотите создать «телефонный справочник», сопоставляющий имена адресам, но у двух людей может быть одинаковое имя, можно корректно обработать такие совпадения следующим образом и создать Map, сопоставляющую именам объединенный список адресов:
Map<String, String> phoneBook
  = people.stream().collect(
    toMap(Person::getName,
          Person::getAddress,
          (s, a) -> s + ", " + a));
Примечание по реализации:
Возвращаемый Collector не является конкурентным. В конвейерах параллельных потоков функция combiner выполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если не требуется объединять результаты в Map в порядке встречи, использование toConcurrentMap(Function, Function, BinaryOperator) может обеспечить более высокую производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключа
U — выходной тип функции отображения значения
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
mergeFunction — функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним ключом, как указано для Map.merge(Object, Object, BiFunction)
Возвращает:
Collector, который собирает элементы в Map, ключи которой являются результатами применения функции отображения ключа к входным элементам, а значения — результатами применения функции отображения значения ко всем входным элементам, равным ключу, и их объединения с помощью функции слияния
См. также:
  • toMap(Function, Function)
  • toMap(Function, Function, BinaryOperator, Supplier)
  • toConcurrentMap(Function, Function, BinaryOperator)

toUnmodifiableMap

public static <T,K,U> Collector<T,?,Map<K,U>> toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
Возвращает Collector, который собирает входные элементы в неизменяемую Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам.

Если среди отображенных ключей есть дубликаты (согласно Object.equals(Object)), функция отображения значения применяется к каждому равному элементу, а полученные результаты объединяются с помощью предоставленной функции слияния.

Возвращаемый коллектор не допускает null в качестве ключей и значений. Если одна из функций отображения возвращает null, будет выброшено NullPointerException.

Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключа
U — выходной тип функции отображения значения
Параметры:
keyMapper — функция отображения для получения ключей; не должна быть null
valueMapper — функция отображения для получения значений; не должна быть null
mergeFunction — функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним ключом, как указано для Map.merge(Object, Object, BiFunction); не должна быть null
Возвращает:
Collector, который собирает входные элементы в неизменяемую Map, ключи и значения которой являются результатами применения предоставленных функций отображения к входным элементам
Выбрасывает:
NullPointerException — если keyMapper, valueMapper или mergeFunction равен null
Начиная с версии:
10
См. также:
  • toUnmodifiableMap(Function, Function)

toMap

public 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> mapFactory)
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого являются результатами применения предоставленных функций отображения к входным элементам.

Если отображённые ключи содержат дубликаты (согласно Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния. Map создаётся предоставленной функцией-поставщиком.

Примечание по реализации:
Возвращаемый Collector не является потокобезопасным. Для конвейеров параллельных потоков функция combiner работает, объединяя ключи одной карты с другой, что может быть затратной операцией. Если результаты не требуется объединять в Map в порядке встречи, использование toConcurrentMap(Function, Function, BinaryOperator, Supplier) может обеспечить более высокую производительность при параллельной обработке.
Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключей
U — выходной тип функции отображения значений
M — тип результирующего Map
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
mergeFunction — функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним ключом, как предусмотрено в Map.merge(Object, Object, BiFunction)
mapFactory — функция-поставщик, предоставляющая новую пустую Map, в которую будут помещены результаты
Возвращает:
Collector, собирающий элементы в Map, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния
См. также:
  • toMap(Function, Function)
  • toMap(Function, Function, BinaryOperator)
  • toConcurrentMap(Function, Function, BinaryOperator, Supplier)

toConcurrentMap

public static <T,K,U> Collector<T, ?, ConcurrentMap<K,U>> toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения предоставленных функций отображения к входным элементам.

Если отображённые ключи содержат дубликаты (согласно Object.equals(Object)), при выполнении операции сбора выбрасывается IllegalStateException. Если отображённые ключи могут содержать дубликаты, вместо этого используйте toConcurrentMap(Function, Function, BinaryOperator).

Для возвращаемого ConcurrentMap не гарантируются тип, изменяемость или сериализуемость.

Примечание API:
Часто входные элементы используются в качестве ключа или значения. В этом случае может быть полезен вспомогательный метод Function.identity(). Например, следующий код создаёт ConcurrentMap, сопоставляющую студентам их средний балл:
ConcurrentMap<Student, Double> studentToGPA
  = students.stream().collect(
    toConcurrentMap(Function.identity(),
                    student -> computeGPA(student)));
А следующий код создаёт ConcurrentMap, сопоставляющую уникальные идентификаторы студентам:
ConcurrentMap<String, Student> studentIdToStudent
  = students.stream().collect(
    toConcurrentMap(Student::getId,
                    Function.identity()));

Это сборщик с характеристиками concurrent и unordered.

Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключей
U — выходной тип функции отображения значений
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
Возвращает:
параллельный неупорядоченный Collector, собирающий элементы в ConcurrentMap, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений к входным элементам
См. также:
  • toMap(Function, Function)
  • toConcurrentMap(Function, Function, BinaryOperator)
  • toConcurrentMap(Function, Function, BinaryOperator, Supplier)

toConcurrentMap

public 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)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения предоставленных функций отображения к входным элементам.

Если отображённые ключи содержат дубликаты (согласно Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния.

Для возвращаемого ConcurrentMap не гарантируются тип, изменяемость или сериализуемость.

Примечание API:
Существует несколько способов обработки конфликтов, возникающих, когда несколько элементов отображаются в один и тот же ключ. В других вариантах toConcurrentMap просто используется функция слияния, которая всегда выбрасывает исключение, однако можно легко реализовать более гибкие правила слияния. Например, если у вас есть поток Person и вы хотите создать «телефонную книгу», сопоставляющую имена адресам, но возможно, что у двух людей одинаковые имена, можно поступить следующим образом, чтобы корректно обработать такие конфликты и создать ConcurrentMap, сопоставляющую имена объединённому списку адресов:
ConcurrentMap<String, String> phoneBook
  = people.stream().collect(
    toConcurrentMap(Person::getName,
                    Person::getAddress,
                    (s, a) -> s + ", " + a));

Это сборщик с характеристиками concurrent и unordered.

Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключей
U — выходной тип функции отображения значений
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
mergeFunction — функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним ключом, как предусмотрено в Map.merge(Object, Object, BiFunction)
Возвращает:
параллельный неупорядоченный Collector, собирающий элементы в ConcurrentMap, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния
См. также:
  • toConcurrentMap(Function, Function)
  • toConcurrentMap(Function, Function, BinaryOperator, Supplier)
  • toMap(Function, Function, BinaryOperator)

toConcurrentMap

public 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> mapFactory)
Возвращает параллельный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения предоставленных функций отображения к входным элементам.

Если отображённые ключи содержат дубликаты (согласно Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния. ConcurrentMap создаётся предоставленной функцией-поставщиком.

Это сборщик с характеристиками concurrent и unordered.

Параметры типа:
T — тип входных элементов
K — выходной тип функции отображения ключей
U — выходной тип функции отображения значений
M — тип результирующего ConcurrentMap
Параметры:
keyMapper — функция отображения для получения ключей
valueMapper — функция отображения для получения значений
mergeFunction — функция слияния, используемая для разрешения конфликтов между значениями, связанными с одним ключом, как предусмотрено в Map.merge(Object, Object, BiFunction)
mapFactory — функция-поставщик, предоставляющая новую пустую ConcurrentMap, в которую будут помещены результаты
Возвращает:
параллельный неупорядоченный Collector, собирающий элементы в ConcurrentMap, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния
См. также:
  • toConcurrentMap(Function, Function)
  • toConcurrentMap(Function, Function, BinaryOperator)
  • toMap(Function, Function, BinaryOperator, Supplier)

summarizingInt

public static <T> Collector<T, ?, IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, создающую int, и возвращает сводную статистику для полученных значений.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция отображения, применяемая к каждому элементу
Возвращает:
Collector, выполняющий редукцию для вычисления сводной статистики
См. также:
  • summarizingDouble(ToDoubleFunction)
  • summarizingLong(ToLongFunction)

summarizingLong

public static <T> Collector<T, ?, LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, создающую long, и возвращает сводную статистику для полученных значений.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция отображения, применяемая к каждому элементу
Возвращает:
Collector, выполняющий редукцию для вычисления сводной статистики
См. также:
  • summarizingDouble(ToDoubleFunction)
  • summarizingInt(ToIntFunction)

summarizingDouble

public static <T> Collector<T, ?, DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, создающую double, и возвращает сводную статистику для полученных значений.
Параметры типа:
T — тип входных элементов
Параметры:
mapper — функция отображения, применяемая к каждому элементу
Возвращает:
Collector, выполняющий редукцию для вычисления сводной статистики
См. также:
  • summarizingLong(ToLongFunction)
  • summarizingInt(ToIntFunction)

teeing

public static <T,R1,R2,R> Collector<T,?,R> teeing(Collector<? super T, ?, R1> downstream1, Collector<? super T, ?, R2> downstream2, BiFunction<? super R1, ? super R2, R> merger)
Возвращает Collector, представляющий собой композицию двух нижестоящих сборщиков. Каждый элемент, переданный результирующему сборщику, обрабатывается обоими нижестоящими сборщиками, после чего их результаты объединяются указанной функцией слияния в итоговый результат.

Функции результирующего сборщика выполняют следующие действия:

  • supplier: создаёт контейнер результата, содержащий контейнеры результатов, полученные вызовом функции supplier каждого сборщика
  • accumulator: вызывает accumulator каждого сборщика с его контейнером результата и входным элементом
  • combiner: вызывает combiner каждого сборщика с двумя контейнерами результатов
  • finisher: вызывает finisher каждого сборщика с его контейнером результата, затем вызывает предоставленную функцию объединения и возвращает её результат.

Результирующий сборщик имеет характеристику Collector.Characteristics.UNORDERED, если оба нижестоящих сборщика неупорядочены, и характеристику Collector.Characteristics.CONCURRENT, если оба нижестоящих сборщика параллельны.

Параметры типа:
T — тип входных элементов
R1 — тип результата первого сборщика
R2 — тип результата второго сборщика
R — тип итогового результата
Параметры:
downstream1 — первый нижестоящий сборщик
downstream2 — второй нижестоящий сборщик
merger — функция, объединяющая два результата в один
Возвращает:
Collector, агрегирующий результаты двух предоставленных сборщиков.
Начиная с версии:
12

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/stream/Collectors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API