Класс 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));
- Since:
- 1.8
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
static <T> Collector<T, |
averagingDouble |
Возвращает Collector, который производит среднее арифметическое значения функции с двойной точностью, применённой к элементам ввода. |
static <T> Collector<T, |
averagingInt |
Возвращает Collector, который производит среднее арифметическое значения целочисленной функции, применённой к элементам ввода. |
static <T> Collector<T, |
averagingLong |
Возвращает Collector, который производит среднее арифметическое значения функции с типом long, применённой к элементам ввода. |
static <T, |
collectingAndThen |
Адаптирует Collector, чтобы выполнить дополнительное завершающее преобразование. |
static <T> Collector<T, |
counting() |
Возвращает Collector, принимающий элементы типа T, который подсчитывает количество элементов ввода. |
static <T, |
filtering |
Адаптирует Collector, принимающий элементы того же типа T, применяя предикат к каждому элементу ввода и накапливая только если предикат возвращает %%%CODE_BLOCK_24%%。 |
static <T, |
flatMapping |
Адаптирует Collector, принимающий элементы типа U, к одному, принимающему элементы типа T, применяя функцию плоского отображения к каждому элементу ввода перед накоплением. |
static <T, |
groupingBy |
Возвращает Collector, реализующий операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации и возвращая результаты в %%%CODE_BLOCK_34%%。 |
static <T, |
groupingBy |
Возвращает Collector, реализующий каскадную операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с использованием указанного последующего Collector. |
static <T, |
groupingBy |
Возвращает Collector, реализующий каскадную операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с использованием указанного последующего Collector. |
static <T, |
groupingByConcurrent |
Возвращает конкурирующий Collector, реализующий операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации. |
static <T, |
groupingByConcurrent |
Возвращает конкурирующий Collector, реализующий каскадную операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с использованием указанного последующего Collector. |
static <T, |
groupingByConcurrent |
Возвращает конкурирующий Collector, реализующий каскадную операцию «группировка по» над элементами ввода типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с использованием указанного последующего Collector. |
static Collector<CharSequence, |
joining() |
Возвращает Collector, который конкатенирует элементы ввода в String, в порядке их появления. |
static Collector<CharSequence, |
joining |
Возвращает Collector, который конкатенирует элементы ввода, разделенные указанным разделителем, в порядке их появления. |
static Collector<CharSequence, |
joining |
Возвращает Collector, который конкатенирует элементы ввода, разделенные указанным разделителем, с указанным префиксом и суффиксом, в порядке их появления. |
static <T, |
mapping |
Адаптирует Collector, принимающий элементы типа U, к одному, принимающему элементы типа T, применяя функцию отображения к каждому элементу ввода перед накоплением. |
static <T> Collector<T, |
maxBy |
Возвращает Collector, который производит максимальный элемент в соответствии с заданным Comparator, описанным как Optional<T>. |
static <T> Collector<T, |
minBy |
Возвращает Collector, который производит минимальный элемент в соответствии с заданным Comparator, описанным как Optional<T>. |
static <T> Collector<T, |
partitioningBy |
Возвращает Collector, который разделяет элементы ввода в соответствии с Predicate, и организует их в Map<Boolean, List<T>>. |
static <T, |
partitioningBy |
Возвращает Collector, который разделяет элементы ввода в соответствии с Predicate, сводит значения в каждом разделе в соответствии с другим Collector, и организует их в Map<Boolean, D>, значения которого являются результатом последующего сокращения. |
static <T> Collector<T, |
reducing |
Возвращает Collector, который выполняет сокращение своих входных элементов под заданной BinaryOperator. |
static <T> Collector<T, |
reducing |
Возвращает Collector, который выполняет сокращение своих входных элементов под заданной BinaryOperator с использованием предоставленного идентификатора. |
static <T, |
reducing |
Возвращает Collector, который выполняет сокращение своих входных элементов под заданной функцией отображения и BinaryOperator. |
static <T> Collector<T, |
summarizingDouble |
Возвращает Collector, который применяет функцию отображения, производящую double, к каждому элементу ввода и возвращает сводные статистические данные для полученных значений. |
static <T> Collector<T, |
summarizingInt |
Возвращает Collector, который применяет функцию отображения, производящую int, к каждому элементу ввода и возвращает сводные статистические данные для полученных значений. |
static <T> Collector<T, |
summarizingLong |
Возвращает Collector, который применяет функцию отображения, производящую long, к каждому элементу ввода и возвращает сводные статистические данные для полученных значений. |
static <T> Collector<T, |
summingDouble |
Возвращает Collector, который производит сумму значений функции с двойной точностью, применённой к элементам ввода. |
static <T> Collector<T, |
summingInt |
Возвращает Collector, который производит сумму значений целочисленной функции, применённой к элементам ввода. |
static <T> Collector<T, |
summingLong |
Возвращает Collector, который производит сумму значений функции с типом long, применённой к элементам ввода. |
static <T, |
teeing |
Возвращает Collector, являющийся композицией двух последующих коллекторов. |
static <T, |
toCollection |
Возвращает Collector, который накапливает элементы ввода в новый Collection, в порядке их появления. |
static <T, |
toConcurrentMap |
Возвращает конкурирующий Collector, который накапливает элементы в ConcurrentMap, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T, |
toConcurrentMap |
Возвращает конкурирующий Collector, который накапливает элементы в ConcurrentMap, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T, |
toConcurrentMap |
Возвращает конкурирующий Collector, который накапливает элементы в ConcurrentMap, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T> Collector<T, |
toList() |
Возвращает Collector, который накапливает элементы ввода в новый List. |
static <T, |
toMap |
Возвращает Collector, который накапливает элементы в Map, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T, |
toMap |
Возвращает Collector, который накапливает элементы в Map, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T, |
toMap |
Возвращает Collector, который накапливает элементы в Map, ключи и значения которого являются результатом применения указанных функций отображения к элементам ввода. |
static <T> Collector<T, |
toSet() |
Возвращает Collector, который накапливает элементы ввода в новый Set. |
static <T> Collector<T, |
toUnmodifiableList() |
Возвращает Collector, который накапливает элементы ввода в неизменяемый список unmodifiable List в порядке их появления. |
static <T, |
toUnmodifiableMap |
Возвращает Collector, который накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. |
static <T, |
toUnmodifiableMap |
Возвращает Collector, который накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. |
static <T> Collector<T, |
toUnmodifiableSet() |
Возвращает Collector, который накапливает входные элементы в неизменяемый набор. |
Подробное описание методов
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 в порядке их встреч. Возвращаемый коллектор не допускает нулевые значения и выбросит NullPointerException, если ему будет представлено нулевое значение.- Параметры типов:
-
T- тип входных элементов - Возвращаемое значение:
Collector, который накапливает входные элементы в неизменяемый список List в порядке их встреч- С:
- 10
toSet
public static <T> Collector<T,?,Set<T>> toSet()
Collector, который накапливает входные элементы в новый Set. Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Set не гарантируются; если требуется больший контроль над возвращаемым Set, используйте toCollection(Supplier). Это коллектор unordered.
- Параметры типов:
-
T- тип входных элементов - Возвращаемое значение:
Collector, который собирает все входные элементы вSet
toUnmodifiableSet
public static <T> Collector<T,?,Set<T>> toUnmodifiableSet()
Collector, который накапливает входные элементы в неизменяемое множество Set. Возвращаемый коллектор не допускает нулевые значения и выбросит NullPointerException, если ему будет представлено нулевое значение. Если вход содержит дубликаты элементов, сохраняется произвольный элемент дубликатов. Это коллектор unordered.
- Параметры типов:
-
T- тип входных элементов - Возвращаемое значение:
Collector, который накапливает входные элементы в неизменяемое множество Set- С:
- 10
joining
public static Collector<CharSequence,?,String> joining()
Collector, который конкатенирует входные элементы в String, в порядке их встреч.- Возвращаемое значение:
Collector, который конкатенирует входные элементы вString, в порядке их встреч
joining
public static Collector<CharSequence,?,String> joining(CharSequence delimiter)
Collector, который конкатенирует входные элементы, разделённые указанным разделителем, в порядке их встреч.- Параметры:
-
delimiter- разделитель, используемый между каждым элементом - Возвращаемое значение:
Collector, который конкатенирует элементы CharSequence, разделённые указанным разделителем, в порядке их встреч
joining
public static Collector<CharSequence,?,String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Collector, который конкатенирует входные элементы, разделённые указанным разделителем, с указанным префиксом и суффиксом, в порядке их встреч.- Параметры:
-
delimiter- разделитель, используемый между каждым элементом -
prefix- последовательность символов, используемая в начале результирующей строки -
suffix- последовательность символов, используемая в конце результирующей строки - Возвращаемое значение:
Collector, который конкатенирует элементы CharSequence, разделённые указанным разделителем, в порядке их встреч
mapping
public static <T, U, A, R> Collector<T,?,R> mapping(Function<? super T,? extends U> mapper, Collector<? super U,A,R> downstream)
Collector, принимающий элементы типа U, в T, применяя функцию преобразования к каждому входному элементу перед накоплением.- Примечание API:
- Коллекторы
mapping()наиболее полезны при использовании в многоуровневом сокращении, например, послеgroupingByилиpartitioningBy. Например, задан потокPerson, чтобы накопить множество фамилий в каждом городе:Map<City, Set<String>> lastNamesByCity = people.stream().collect( groupingBy(Person::getCity, mapping(Person::getLastName, toSet()))); - Параметры типов:
-
T- тип входных элементов -
U- тип элементов, принимаемых коллектором вниз по течению -
A- промежуточный тип накопления коллектора вниз по течению -
R- тип результата коллектора - Параметры:
-
mapper- функция, применяемая к входным элементам -
downstream- коллектор, который будет принимать сопоставленные значения - Возвращаемое значение:
- коллектор, применяющий функцию преобразования к входным элементам и предоставляющий сопоставленные результаты коллектору вниз по течению
flatMapping
public static <T, U, A, R> Collector<T,?,R> flatMapping(Function<? super T,? extends Stream<? extends U>> mapper, Collector<? super U,A,R> downstream)
Collector, принимающий элементы типа U, в T, применяя функцию плоского преобразования к каждому входному элементу перед накоплением. Функция плоского преобразования сопоставляет входной элемент с потоком stream, охватывающим ноль или более выходных элементов, которые затем накапливаются вниз по течению. Каждый сопоставленный поток closed после того, как его содержимое было размещено вниз по течению. (Если сопоставленный поток null, используется пустой поток.)- Примечание API:
- Коллекторы
flatMapping()наиболее полезны при использовании в многоуровневом сокращении, например, послеgroupingByилиpartitioningBy. Например, задан потокOrder, чтобы накопить множество позиций по каждой позиции по каждому клиенту:Map<String, Set<LineItem>> itemsByCustomerName = orders.stream().collect( groupingBy(Order::getCustomerName, flatMapping(order -> order.getLineItems().stream(), toSet()))); - Параметры типов:
-
T- тип входных элементов -
U- тип элементов, принимаемых коллектором вниз по течению -
A- промежуточный тип накопления коллектора вниз по течению -
R- тип результата коллектора - Параметры:
-
mapper- функция, применяемая к входным элементам, возвращающая поток результатов -
downstream- коллектор, который получит элементы потока, возвращаемого mapper - Возвращаемое значение:
- коллектор, применяющий функцию преобразования к входным элементам и предоставляющий результаты плоского преобразования коллектору вниз по течению
- С:
- 9
filtering
public static <T, A, R> Collector<T,?,R> filtering(Predicate<? super T> predicate, Collector<? super T,A,R> downstream)
Collector в тот, который принимает элементы того же типа T, применяя предикат к каждому входному элементу и накапливая только если предикат возвращает true. - Примечание API:
- Коллекторы
filtering()наиболее полезны при использовании в многоуровневом сокращении, например, послеgroupingByилиpartitioningBy. Например, задан потокEmployee, чтобы накопить сотрудников в каждом отделе, у которых зарплата выше определенного порога:
Отличается от операцииMap<Department, Set<Employee>> wellPaidEmployeesByDepartment = employees.stream().collect( groupingBy(Employee::getDepartment, filtering(e -> e.getSalary() > 2000, toSet())));filter()потока. В этом примере предположим, что в некоторых отделах нет сотрудников, зарплата которых выше порога. Использование коллектора фильтрации, как показано выше, приведет к отображению этого отдела на пустойSet. Если вместо этого была выполнена операция потокаfilter(), такого отображения для этого отдела вообще не было. - Параметры типов:
-
T- тип входных элементов -
A- промежуточный тип накопления коллектора вниз по течению -
R- тип результата коллектора - Параметры:
-
predicate- предикат, применяемый к входным элементам -
downstream- коллектор, который будет принимать значения, соответствующие предикату - Возвращаемое значение:
- коллектор, применяющий предикат к входным элементам и предоставляющий соответствующие элементы коллектору вниз по течению
- С:
- 9
collectingAndThen
public static <T, A, R, RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
Collector для выполнения дополнительного завершающего преобразования. Например, коллектор toList() можно преобразовать в всегда создающий неизменяемый список:
List<String> list = people.stream().collect(
collectingAndThen(toList(),
Collections::unmodifiableList));
- Параметры типов:
-
T- тип входных элементов -
A- промежуточный тип накопления коллектора вниз по течению -
R- тип результата коллектора вниз по течению -
RR- тип результата результирующего коллектора - Параметры:
-
downstream- коллектор -
finisher- функция, применяемая к конечному результату коллектора вниз по течению - Возвращаемое значение:
- коллектор, выполняющий действие коллектора вниз по течению, а затем дополнительный завершающий шаг
подсчёт
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, который производит сумму длинной функции, применённой к входным элементам. Если элементов нет, результат — 0.- Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция, извлекающая свойство для суммирования - Возвращает:
Collector, который производит сумму производного свойства
summingDouble
public static <T> Collector<T,?,Double> summingDouble(ToDoubleFunction<? super T> mapper)
Collector, который производит сумму функции с двойной точностью, применённой к входным элементам. Если элементов нет, результат — 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, который производит среднее арифметическое длинной функции, применённой к входным элементам. Если элементов нет, результат — 0.- Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция, извлекающая свойство для усреднения - Возвращает:
Collector, который производит среднее арифметическое производного свойства
averagingDouble
public static <T> Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
Collector, который производит среднее арифметическое функции с двойной точностью, применённой к входным элементам. Если элементов нет, результат — 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- См. также:
группировкаПо
public static <T, K> Collector<T,?,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)
Collector , реализующий операцию «группировка по» для входных элементов типа T, группируя элементы в соответствии с функцией классификации и возвращая результаты в Map. Функция классификации отображает элементы в некоторые ключи типа K. Коллектор создаёт Map<K, List<T>>, ключи которого — значения, полученные в результате применения функции классификации к входным элементам, а соответствующие значения — List , содержащие входные элементы, которые отображаются на соответствующий ключ по функции классификации.
Тип, изменяемость, сериализуемость и безопасность потоков возвращаемых Map или List объектов не гарантируются.
- Требования к реализации:
- Этот результат аналогичен:
groupingBy(classifier, toList()); - Примечание реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для потоковых конвейеров с параллельной обработкой функцияcombinerработает, объединяя ключи из одного отображения в другое, что может быть ресурсоёмкой операцией. Если сохранение порядка, в котором элементы появляются в результирующемMapколлекторе, не требуется, использованиеgroupingByConcurrent(Function)может обеспечить лучшую производительность в параллельных потоках. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами - Возвращаемое значение:
Collector, реализующий операцию группировки- См. также:
группировкаПо
public static <T, K, A, D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)
Collector , реализующий каскадную операцию «группировка по» для входных элементов типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с помощью указанного коллектора Collector. Функция классификации сопоставляет элементы с некоторым типом ключа K. Коллектор для обработки элементов типа T и создаёт результат типа D. Результирующий коллектор создаёт Map<K, D>.
Тип, изменяемость, сериализуемость и безопасность потоков возвращаемого Map не гарантируются.
Например, для вычисления набора фамилий людей в каждом городе:
Map<City, Set<String>> namesByCity
= people.stream().collect(
groupingBy(Person::getCity,
mapping(Person::getLastName,
toSet())));
- Примечание реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для параллельных потоковых конвейеров функцияcombinerработает, объединяя ключи из одного отображения в другое, что может быть ресурсоёмкой операцией. Если сохранение порядка, в котором элементы представляются коллектору для обработки, не требуется, использованиеgroupingByConcurrent(Function, Collector)может обеспечить лучшую производительность в параллельных потоках. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления для коллектора для обработки -
D- тип результата сокращения для коллектора для обработки - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами -
downstream- коллектор, реализующий операцию сокращения для обработки - Возвращаемое значение:
Collector, реализующий каскадную операцию группировки- См. также:
группировкаПо
public static <T, K, D, A, M extends Map<K, D>> Collector<T,?,M> groupingBy(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream)
Collector , реализующий каскадную операцию «группировка по» для входных элементов типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, с помощью указанного коллектора Collector. Map , создаваемый коллектором, создаётся с помощью функции-поставщика. Функция классификации сопоставляет элементы с некоторым типом ключа K. Коллектор для обработки элементов типа T и создаёт результат типа D. Результирующий коллектор создаёт Map<K, D>.
Например, для вычисления набора фамилий людей в каждом городе, где названия городов отсортированы:
Map<City, Set<String>> namesByCity
= people.stream().collect(
groupingBy(Person::getCity,
TreeMap::new,
mapping(Person::getLastName,
toSet())));
- Примечание реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для параллельных потоковых конвейеров функцияcombinerработает, объединяя ключи из одного отображения в другое, что может быть ресурсоёмкой операцией. Если сохранение порядка, в котором элементы представляются коллектору для обработки, не требуется, использованиеgroupingByConcurrent(Function, Supplier, Collector)может обеспечить лучшую производительность в параллельных потоках. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления для коллектора для обработки -
D- тип результата сокращения для коллектора для обработки -
M- тип результирующегоMap - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами -
downstream- коллектор, реализующий операцию сокращения для обработки -
mapFactory- поставщик, предоставляющий новый пустойMapдля вставки результатов - Возвращаемое значение:
Collector, реализующий каскадную операцию группировки- См. также:
группировкаПоКонкурентно
public static <T, K> Collector<T,?,ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T,? extends K> classifier)
Collector , реализующий операцию «группировка по» для входных элементов типа T, группируя элементы в соответствии с функцией классификации. Это concurrent и unordered коллектор.
Функция классификации сопоставляет элементы с некоторым типом ключа K. Коллектор создаёт ConcurrentMap<K, List<T>> , ключи которого — значения, полученные в результате применения функции классификации к входным элементам, а соответствующие значения — List , содержащие входные элементы, которые отображаются на соответствующий ключ по функции классификации.
Тип, изменяемость, сериализуемость возвращаемых ConcurrentMap или List объектов, а также потокобезопасность возвращаемых List объектов не гарантируется.
- Требования к реализации:
- Этот результат аналогичен:
groupingByConcurrent(classifier, toList()); - Параметры типа:
-
T- тип входных элементов -
K- тип ключей - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами - Возвращаемое значение:
- конкурентный, неупорядоченный
Collector, реализующий операцию группировки - См. также:
группировкаПоПараллели
public static <T, K, A, D> Collector<T,?,ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)
Collector, реализующий каскадное "группирование по" операцию над входными элементами типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, используя указанный нисходящий Collector. Это concurrent и unordered коллектор.
Функция классификации отображает элементы в некоторый тип ключа K. Нисходящий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит ConcurrentMap<K, D>.
Нет никаких гарантий относительно типа, изменяемости или сериализуемости возвращаемого ConcurrentMap.
Например, для вычисления набора фамилий людей в каждом городе, где имена городов отсортированы:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(
groupingByConcurrent(Person::getCity,
mapping(Person::getLastName,
toSet())));
- Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления нисходящего коллектора -
D- тип результата нисходящего сокращения - Параметры:
-
classifier- функция классификации, отображающая входные элементы в ключи -
downstream- коллектор, реализующий нисходящее сокращение - Возвращаемое значение:
- конкурентный, неупорядоченный
Collector, реализующий каскадную операцию группировки по - См. также:
группировкаПоПараллели
public static <T, K, A, D, M extends ConcurrentMap<K, D>> Collector<T,?,M> groupingByConcurrent(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream)
Collector, реализующий каскадное "группирование по" операцию над входными элементами типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения над значениями, связанными с заданным ключом, используя указанный нисходящий Collector. ConcurrentMap коллектор, созданный с помощью предоставленной функции фабрики. Это concurrent и unordered коллектор.
Функция классификации отображает элементы в некоторый тип ключа K. Нисходящий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит ConcurrentMap<K, D>.
Например, для вычисления набора фамилий людей в каждом городе, где имена городов отсортированы:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(
groupingByConcurrent(Person::getCity,
ConcurrentSkipListMap::new,
mapping(Person::getLastName,
toSet())));
- Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления нисходящего коллектора -
D- тип результата нисходящего сокращения -
M- тип возвращаемогоConcurrentMap - Параметры:
-
classifier- функция классификации, отображающая входные элементы в ключи -
downstream- коллектор, реализующий нисходящее сокращение -
mapFactory- поставщик, предоставляющий новый пустойConcurrentMap, в который будут вставлены результаты - Возвращаемое значение:
- конкурентный, неупорядоченный
Collector, реализующий каскадную операцию группировки по - См. также:
разделениеПо
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реализующий операцию разделения- См. также:
разделениеПо
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- тип входных элементов -
A- промежуточный тип накопления нисходящего коллектора -
D- тип результата нисходящего сокращения - Параметры:
-
predicate- предикат, используемый для классификации входных элементов -
downstream- коллектор, реализующий нисходящее сокращение - Возвращаемое значение:
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, который накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. Если сопоставленные ключи содержат дубликаты (в соответствии с Object.equals(Object)), при выполнении операции коллекции будет брошено IllegalStateException. Если сопоставленные ключи могут иметь дубликаты, используйте toUnmodifiableMap(Function, Function, BinaryOperator) для обработки слияния значений.
Возвращаемый коллектор не допускает нулевых ключей и значений. Если любая из функций отображения возвращает null, будет брошено NullPointerException.
- Type Parameters:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключей -
U- тип выходного значения функции отображения значений - Parameters:
-
keyMapper- функция отображения для получения ключей, не должна быть null -
valueMapper- функция отображения для получения значений, не должна быть null - Returns:
Collector, который накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам- Throws:
-
NullPointerException- если keyMapper или valueMapper равны null - Since:
- 10
- See Also:
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, который накапливает элементы в карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. Если сопоставленные ключи содержат дубликаты (в соответствии с Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния.
Гарантий по типу, мутабельности, сериализуемости или потокобезопасности возвращаемой карты нет.
- API Note:
- Существует несколько способов обработки коллизий между несколькими элементами, которые отображаются на один и тот же ключ. Другие формы
toMapпросто используют функцию слияния, которая безусловно выбрасывает исключение, но вы можете легко написать более гибкую политику слияния. Например, если у вас есть потокPerson, и вы хотите создать «телефонный справочник», отображающий имя на адрес, но возможно, что у двух человек одинаковое имя, вы можете сделать следующее, чтобы gracefully обрабатывать эти коллизии и создаватьMapкоторая отображает имена на список адресов:Map<String, String> phoneBook = people.stream().collect( toMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a)); - Implementation Note:
- Возвращаемая карта не является конкурентной. Для потоков параллельных стрим-пайплайнов функция
combinerработает путем слияния ключей из одной карты в другую, что может быть дорогостоящей операцией. Если не требуется, чтобы результаты сливались в карту в порядке их появления, использованиеtoConcurrentMap(Function, Function, BinaryOperator)может обеспечить лучшую производительность при параллельной обработке. - Type Parameters:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключей -
U- тип выходного значения функции отображения значений - Parameters:
-
keyMapper- функция отображения для получения ключей -
valueMapper- функция отображения для получения значений -
mergeFunction- функция слияния, используемая для разрешения коллизий между значениями, связанными с одним ключом, как передается вMap.merge(Object, Object, BiFunction) - Returns:
Collectorкоторая собирает элементы в карту, ключи которой являются результатом применения функции отображения ключей к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции слияния- See Also:
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, который накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. Если сопоставленные ключи содержат дубликаты (в соответствии с Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния.
Возвращаемый коллектор не допускает нулевых ключей и значений. Если любая из функций отображения возвращает null, будет брошено NullPointerException.
- Type Parameters:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключей -
U- тип выходного значения функции отображения значений - Parameters:
-
keyMapper- функция отображения для получения ключей, не должна быть null -
valueMapper- функция отображения для получения значений, не должна быть null -
mergeFunction- функция слияния, используемая для разрешения коллизий между значениями, связанными с одним ключом, как передается вMap.merge(Object, Object, BiFunction), не должна быть null - Returns:
Collectorкоторый накапливает входные элементы в неизменяемую карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам- Throws:
-
NullPointerException- если keyMapper, valueMapper или mergeFunction равны null - Since:
- 10
- See Also:
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, который накапливает элементы в карту, ключи и значения которой являются результатом применения предоставленных функций отображения к входным элементам. Если сопоставленные ключи содержат дубликаты (в соответствии с Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции слияния. Карта создается с помощью предоставленной функции поставщика.
- Implementation Note:
- Возвращаемая карта не является конкурентной. Для потоков параллельных стрим-пайплайнов функция
combinerработает путем слияния ключей из одной карты в другую, что может быть дорогостоящей операцией. Если не требуется, чтобы результаты сливались в карту в порядке их появления, использованиеtoConcurrentMap(Function, Function, BinaryOperator, Supplier)может обеспечить лучшую производительность при параллельной обработке. - Type Parameters:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключей -
U- тип выходного значения функции отображения значений -
M- тип возвращаемой карты - Parameters:
-
keyMapper- функция отображения для получения ключей -
valueMapper- функция отображения для получения значений -
mergeFunction- функция слияния, используемая для разрешения коллизий между значениями, связанными с одним ключом, как передается вMap.merge(Object, Object, BiFunction) -
mapFactory- поставщик, предоставляющий новую пустую карту, в которую будут вставлены результаты - Returns:
Collectorкоторая собирает элементы в карту, ключи которой являются результатом применения функции отображения ключей к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции слияния- See Also:
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 Note:
- Часто либо ключ, либо значение является входными элементами. В этом случае может быть полезен вспомогательный метод
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коллектор. - Type Parameters:
-
T- тип входных элементов -
K- выходной тип функции отображения ключей -
U- выходной тип функции отображения значений - Parameters:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений - Returns:
- конкурирующий, неупорядоченный
Collector, который собирает элементы вConcurrentMap, где ключи являются результатом применения функции отображения ключей к входным элементам, а значения — результатом применения функции отображения значений к входным элементам - See Also:
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 Note:
- Существует несколько способов обработки коллизий между несколькими элементами, отображающимися на один и тот же ключ. Другие формы
toConcurrentMapпросто используют функцию объединения, которая безусловно выбрасывает исключение, но вы можете легко написать более гибкие политики объединения. Например, если у вас есть потокPerson, и вы хотите создать «телефонный справочник», отображающий имя на адрес, но возможно, что у двух людей одинаковое имя, вы можете сделать следующее, чтобы справиться с этими коллизиями и получитьConcurrentMapотображающее имена на конкатенированный список адресов:ConcurrentMap<String, String> phoneBook = people.stream().collect( toConcurrentMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a));Это
concurrentиunorderedколлектор. - Type Parameters:
-
T- тип входных элементов -
K- выходной тип функции отображения ключей -
U- выходной тип функции отображения значений - Parameters:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений -
mergeFunction- функция объединения, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, как предоставлено вMap.merge(Object, Object, BiFunction) - Returns:
- конкурирующий, неупорядоченный
Collector, который собирает элементы вConcurrentMap, где ключи являются результатом применения функции отображения ключей к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции объединения - See Also:
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 коллектор.
- Type Parameters:
-
T- тип входных элементов -
K- выходной тип функции отображения ключей -
U- выходной тип функции отображения значений -
M- тип результирующегоConcurrentMap - Parameters:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений -
mergeFunction- функция объединения, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, как предоставлено вMap.merge(Object, Object, BiFunction) -
mapFactory- поставщик, предоставляющий новый пустойConcurrentMapдля вставки результатов - Returns:
- конкурирующий, неупорядоченный
Collector, который собирает элементы вConcurrentMap, где ключи являются результатом применения функции отображения ключей к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции объединения - See Also:
summarizingInt
public static <T> Collector<T,?,IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
Collector, который применяет функцию отображения, производящую целые числа, к каждому входному элементу и возвращает статистические данные сводки для полученных значений.- Type Parameters:
-
T- тип входных элементов - Parameters:
-
mapper- функция отображения, применяемая к каждому элементу - Returns:
Collectorреализующий сводку статистических данных- See Also:
summarizingLong
public static <T> Collector<T,?,LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
Collector, который применяет функцию отображения, производящую длинные целые числа, к каждому входному элементу и возвращает статистические данные сводки для полученных значений.- Type Parameters:
-
T- тип входных элементов - Parameters:
-
mapper- функция отображения, применяемая к каждому элементу - Returns:
Collectorреализующий сводку статистических данных- See Also:
summarizingDouble
public static <T> Collector<T,?,DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
Collector, который применяет функцию отображения, производящую double, к каждому входному элементу и возвращает статистические данные сводки для полученных значений.- Type Parameters:
-
T- тип входных элементов - Parameters:
-
mapper- функция отображения, применяемая к каждому элементу - Returns:
Collectorреализующий сводку статистических данных- See Also:
teeing
public static <T, R1, R2, R> Collector<T,?,R> teeing(Collector<? super T,?,R1> downstream1, Collector<? super T,?,R2> downstream2, BiFunction<? super R1,? super R2,R> merger)
Collector , являющуюся составной частью двух коллекторов-последователей. Каждый элемент, переданный результатному коллектору, обрабатывается обоими коллекторами-последователями, а затем их результаты объединяются с помощью заданной функции объединения в окончательный результат. Результирующий коллектор выполняет следующие действия:
- supplier: создаёт контейнер результата, который содержит контейнеры результатов, полученные путём вызова поставщика каждого коллектора
- accumulator: вызывает активатор каждого коллектора с его контейнером результата и входным элементом
- combiner: вызывает комбинировщик каждого коллектора с двумя контейнерами результатов
- finisher: вызывает финишер каждого коллектора со своим контейнером результата, затем вызывает предоставленный объединитель и возвращает его результат.
Результирующий коллектор является Collector.Characteristics.UNORDERED, если оба коллектора-последователя не упорядочены, и Collector.Characteristics.CONCURRENT, если оба коллектора-последователя являются конкурирующими.
- Тип параметров:
-
T- тип входных элементов -
R1- тип результата первого коллектора -
R2- тип результата второго коллектора -
R- тип конечного результата - Параметры:
-
downstream1- первый коллектор-последователь -
downstream2- второй коллектор-последователь -
merger- функция, которая объединяет два результата в один - Возвращает:
- a
Collector, который агрегирует результаты двух предоставленных коллекторов. - С:
- 12
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Collectors.html