Spec-Zone.ru › OpenJDK 27

Класс 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, вычисляющий среднее арифметическое значений функции, возвращающей integer, применённой к входным элементам.
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, вычисляющий сумму значений функции, возвращающей integer, применённой к входным элементам.
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
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, «равен» ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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

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

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

toUnmodifiableSet

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

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

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

filtering

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

collectingAndThen

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

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. Для выполнения простой операции map-reduce над потоком используйте вместо этого 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, реализующий операцию map-reduce
См. также:
  • 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. Collector создаёт Map<K, List<T>>, ключами которого являются значения, полученные при применении функции классификации к входным элементам, а соответствующими значениями — Lists, содержащие входные элементы, сопоставленные с соответствующим ключом функцией классификации.

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

Требования к реализации:
Результат аналогичен следующему:
    groupingBy(classifier, toList());
Примечание по реализации:
Возвращаемый Collector не является параллельным. В параллельных конвейерах потоков функция combiner работает, объединяя ключи одной карты с другой, что может быть затратной операцией. Если сохранять порядок появления элементов в результирующем Collector 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, реализующий каскадную операцию группировки («group by») входных элементов типа 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, реализующий каскадную операцию группировки («group by») входных элементов типа 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, реализующий операцию группировки («group by») входных элементов типа 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, реализующий каскадную операцию группировки («group by») входных элементов типа 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, реализующий каскадную операцию группировки («group by») входных элементов типа 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:
Если раздел не содержит элементов, его значением в результирующей карте будет пустой список.
Параметры типа:
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:
Если раздел не содержит элементов, его значение в результирующей карте будет получено вызовом функции-поставщика нижестоящего коллектора с последующим применением функции-финишера.
Параметры типа:
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-значения. Если какая-либо из функций отображения возвращает 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-значения. Если какая-либо из функций отображения возвращает 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, представляющий собой комбинацию двух последующих сборщиков. Каждый элемент, переданный результирующему сборщику, обрабатывается обоими последующими сборщиками, после чего их результаты объединяются указанной функцией слияния в окончательный результат.

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

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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