Класс 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 |
averagingDouble |
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей double, применённой к входным элементам. |
static <T> Collector |
averagingInt |
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей integer, применённой к входным элементам. |
static <T> Collector |
averagingLong |
Возвращает Collector, вычисляющий среднее арифметическое значений функции, возвращающей long, применённой к входным элементам. |
static <T, |
collectingAndThen |
Адаптирует Collector для выполнения дополнительного завершающего преобразования. |
static <T> Collector |
counting() |
Возвращает Collector, принимающий элементы типа T и подсчитывающий количество входных элементов. |
static <T, |
filtering |
Адаптирует Collector для приёма элементов того же типа T, применяя предикат к каждому входному элементу и накапливая только те элементы, для которых предикат возвращает true. |
static <T, |
flatMapping |
Адаптирует Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию плоского отображения к каждому входному элементу перед накоплением. |
static <T, |
groupingBy |
Возвращает Collector, реализующий операцию группировки входных элементов типа T: элементы группируются в соответствии с функцией классификации, а результат возвращается в виде Map. |
static <T, K, D, A, M extends Map<K, |
groupingBy |
Возвращает Collector, реализующий каскадную операцию группировки входных элементов типа T: элементы группируются в соответствии с функцией классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. |
static <T, |
groupingBy |
Возвращает Collector, реализующий каскадную операцию группировки входных элементов типа T: элементы группируются в соответствии с функцией классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. |
static <T, |
groupingByConcurrent |
Возвращает конкурентный Collector, реализующий операцию группировки входных элементов типа T в соответствии с функцией классификации. |
static <T, K, A, D, M extends ConcurrentMap<K, |
groupingByConcurrent |
Возвращает конкурентный Collector, реализующий каскадную операцию группировки входных элементов типа T: элементы группируются в соответствии с функцией классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. |
static <T, |
groupingByConcurrent |
Возвращает конкурентный Collector, реализующий каскадную операцию группировки входных элементов типа T: элементы группируются в соответствии с функцией классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. |
static Collector |
joining() |
Возвращает Collector, объединяющий входные элементы в String в порядке их встречи. |
static Collector |
joining |
Возвращает Collector, объединяющий входные элементы в порядке их встречи и разделяющий их указанным разделителем. |
static Collector |
joining |
Возвращает Collector, объединяющий входные элементы в порядке их встречи, разделяя их указанным разделителем и добавляя указанные префикс и суффикс. |
static <T, |
mapping |
Адаптирует Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию отображения к каждому входному элементу перед накоплением. |
static <T> Collector |
maxBy |
Возвращает Collector, который находит максимальный элемент в соответствии с заданным Comparator, представленным как Optional<T>. |
static <T> Collector |
minBy |
Возвращает Collector, который находит минимальный элемент в соответствии с заданным Comparator, представленным как Optional<T>. |
static <T> Collector |
partitioningBy |
Возвращает Collector, который разделяет входные элементы согласно Predicate и организует их в Map<Boolean, List<T>>. |
static <T, |
partitioningBy |
Возвращает Collector, который разделяет входные элементы согласно Predicate, выполняет редукцию значений в каждой группе согласно другому Collector и организует их в Map<Boolean, D>, значения которого являются результатами последующей редукции. |
static <T> Collector |
reducing |
Возвращает Collector, выполняющий редукцию входных элементов с помощью указанного BinaryOperator. |
static <T> Collector |
reducing |
Возвращает Collector, выполняющий редукцию входных элементов с помощью указанного BinaryOperator, используя заданный нейтральный элемент. |
static <T, |
reducing |
Возвращает Collector, выполняющий редукцию входных элементов с помощью заданной функции отображения и BinaryOperator. |
static <T> Collector |
summarizingDouble |
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, возвращающую double, и возвращает сводную статистику для полученных значений. |
static <T> Collector |
summarizingInt |
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, возвращающую int, и возвращает сводную статистику для полученных значений. |
static <T> Collector |
summarizingLong |
Возвращает Collector, который применяет к каждому входному элементу функцию отображения, возвращающую long, и возвращает сводную статистику для полученных значений. |
static <T> Collector |
summingDouble |
Возвращает Collector, вычисляющий сумму значений функции, возвращающей double, применённой к входным элементам. |
static <T> Collector |
summingInt |
Возвращает Collector, вычисляющий сумму значений функции, возвращающей integer, применённой к входным элементам. |
static <T> Collector |
summingLong |
Возвращает Collector, вычисляющий сумму значений функции, возвращающей long, применённой к входным элементам. |
static <T, |
teeing |
Возвращает Collector, представляющий собой композицию двух последующих сборщиков. |
static <T, C extends Collection<T>> |
toCollection |
Возвращает Collector, накапливающий входные элементы в новом Collection в порядке их встречи. |
static <T, |
toConcurrentMap |
Возвращает конкурентный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T, |
toConcurrentMap |
Возвращает конкурентный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T, K, U, M extends ConcurrentMap<K, |
toConcurrentMap |
Возвращает конкурентный Collector, накапливающий элементы в ConcurrentMap, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T> Collector |
toList() |
Возвращает Collector, накапливающий входные элементы в новом List. |
static <T, |
toMap |
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T, |
toMap |
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T, K, U, M extends Map<K, |
toMap |
Возвращает Collector, накапливающий элементы в Map, ключи и значения которого являются результатами применения заданных функций отображения к входным элементам. |
static <T> Collector |
toSet() |
Возвращает Collector, накапливающий входные элементы в новом Set. |
static <T> Collector |
toUnmodifiableList() |
Возвращает Collector, накапливающий входные элементы в неизменяемый список в порядке их встречи. |
static <T, |
toUnmodifiableMap |
Возвращает Collector, накапливающий входные элементы в неизменяемую карту, ключи и значения которой являются результатами применения заданных функций отображения к входным элементам. |
static <T, |
toUnmodifiableMap |
Возвращает Collector, накапливающий входные элементы в неизменяемую карту, ключи и значения которой являются результатами применения заданных функций отображения к входным элементам. |
static <T> Collector |
toUnmodifiableSet() |
Возвращает Collector, накапливающий входные элементы в неизменяемое множество. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, «равен» ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает значение хеш-кода этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
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). Этот 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— тип элементов, принимаемых нисходящим CollectorA— промежуточный тип накопления нисходящего CollectorR— тип результата 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— тип элементов, принимаемых нисходящим CollectorA— промежуточный тип накопления нисходящего CollectorR— тип результата 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, чтобы накопить в каждом отделе сотрудников, чья зарплата превышает определённый порог:
Collector с фильтрацией отличается от операцииMap<Department, Set<Employee>> wellPaidEmployeesByDepartment = employees.stream().collect( groupingBy(Employee::getDepartment, filtering(e -> e.getSalary() > 2000, toSet())));filter()потока. В этом примере предположим, что в некотором отделе нет сотрудников, чья зарплата превышает порог. Использование показанного выше Collector с фильтрацией приведёт к отображению этого отдела в пустойSet. Если же вместо этого выполнить операциюfilter()потока, отображения для этого отдела вообще не будет. - Параметры типа:
T— тип входных элементовA— промежуточный тип накопления нисходящего CollectorR— тип результата 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— промежуточный тип накопления нисходящего CollectorR— тип результата нисходящего CollectorRR— тип результата создаваемого 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
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
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- См. также:
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работает, объединяя ключи одной карты с другой, что может быть затратной операцией. Если сохранять порядок появления элементов в результирующем CollectorMapне требуется, использованиеgroupingByConcurrent(Function)может обеспечить более высокую производительность при параллельной обработке. - Параметры типа:
T— тип входных элементовK— тип ключей- Параметры:
-
classifier— функция классификации, сопоставляющая входные элементы ключам - Возвращает:
Collector, реализующий операцию группировки- См. также:
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
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, реализующий каскадную операцию группировки- См. также:
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, реализующий операцию группировки - См. также:
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, реализующий каскадную операцию группировки - См. также:
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, реализующий каскадную операцию группировки - См. также:
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
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, реализующий каскадную операцию разделения- См. также:
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, ключи и значения которой являются результатами применения функций отображения к входным элементам- См. также:
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
- См. также:
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, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния- См. также:
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
- См. также:
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, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния- См. также:
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, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений к входным элементам - См. также:
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
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, ключи которой являются результатами применения функции отображения ключей к входным элементам, а значения — результатами применения функции отображения значений ко всем входным элементам, равным ключу, с последующим их объединением с помощью функции слияния - См. также:
summarizingInt
public static <T> Collector<T, ?, IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
Collector, который применяет к каждому входному элементу функцию отображения, возвращающую int, и возвращает сводную статистику для полученных значений.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция отображения, применяемая к каждому элементу - Возвращает:
Collector, выполняющий редукцию с вычислением сводной статистики- См. также:
summarizingLong
public static <T> Collector<T, ?, LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
Collector, который применяет к каждому входному элементу функцию отображения, возвращающую long, и возвращает сводную статистику для полученных значений.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция отображения, применяемая к каждому элементу - Возвращает:
Collector, выполняющий редукцию с вычислением сводной статистики- См. также:
summarizingDouble
public static <T> Collector<T, ?, DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
Collector, который применяет к каждому входному элементу функцию отображения, возвращающую double, и возвращает сводную статистику для полученных значений.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция отображения, применяемая к каждому элементу - Возвращает:
Collector, выполняющий редукцию с вычислением сводной статистики- См. также:
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
© 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.