Класс 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, вычисляющий среднее арифметическое значений функции, возвращающей значения типа int и применяемой к входным элементам. |
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, вычисляющий сумму значений функции, возвращающей значения типа int и применяемой к входным элементам. |
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, накапливающий входные элементы в неизменяемое множество. |
Подробное описание методов
toCollection
public static <T, C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)
Collector, который накапливает входные элементы в новой Collection в порядке следования. Collection создаётся с помощью предоставленной фабрики.- Параметры типа:
T— тип входных элементовC— тип результирующейCollection- Параметры:
-
collectionFactory— поставщик, предоставляющий новую пустуюCollection, в которую будут добавлены результаты - Возвращает:
Collector, собирающий все входные элементы вCollectionв порядке следования
toList
public static <T> Collector<T,?,List<T>> toList()
Collector, который накапливает входные элементы в новом List. Тип, изменяемость, возможность сериализации и потокобезопасность возвращённого List не гарантируются; если требуется больший контроль над возвращённым List, используйте toCollection(Supplier).- Параметры типа:
T— тип входных элементов- Возвращает:
Collector, собирающий все входные элементы вListв порядке следования
toUnmodifiableList
public static <T> Collector<T,?,List<T>> toUnmodifiableList()
Collector, который накапливает входные элементы в неизменяемый List в порядке следования. Возвращаемый Collector не допускает значения null и выбрасывает NullPointerException, если ему передано значение null.- Параметры типа:
T— тип входных элементов- Возвращает:
Collector, накапливающий входные элементы в неизменяемый List в порядке следования- С версии:
- 10
toSet
public static <T> Collector<T,?,Set<T>> toSet()
Collector, который накапливает входные элементы в новом Set. Тип, изменяемость, возможность сериализации и потокобезопасность возвращённого Set не гарантируются; если требуется больший контроль над возвращённым Set, используйте toCollection(Supplier). Этот коллектор имеет характеристику unordered.
- Параметры типа:
T— тип входных элементов- Возвращает:
Collector, собирающий все входные элементы вSet
toUnmodifiableSet
public static <T> Collector<T,?,Set<T>> toUnmodifiableSet()
Collector, который накапливает входные элементы в неизменяемый Set. Возвращаемый Collector не допускает значения null и выбрасывает NullPointerException, если ему передано значение null. Если входные данные содержат повторяющиеся элементы, сохраняется произвольный элемент из группы дубликатов. Этот коллектор имеет характеристику unordered.
- Параметры типа:
T— тип входных элементов- Возвращает:
Collector, накапливающий входные элементы в неизменяемый Set- С версии:
- 10
joining
public static Collector<CharSequence, ?, String> joining()
Collector, который объединяет входные элементы в String в порядке следования.- Возвращает:
Collector, объединяющий входные элементы вStringв порядке следования
joining
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter)
Collector, который объединяет входные элементы в порядке следования, разделяя их указанным разделителем.- Параметры:
-
delimiter— разделитель, используемый между элементами - Возвращает:
Collector, объединяющий элементы CharSequence в порядке следования и разделяющий их указанным разделителем
joining
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Collector, который объединяет входные элементы в порядке следования, разделяя их указанным разделителем и добавляя указанные префикс и суффикс.- Параметры:
-
delimiter— разделитель, используемый между элементами -
prefix— последовательность символов, добавляемая в начало объединённого результата -
suffix— последовательность символов, добавляемая в конец объединённого результата - Возвращает:
Collector, объединяющий элементы CharSequence в порядке следования и разделяющий их указанным разделителем
mapping
public static <T,U,A,R> Collector<T,?,R> mapping(Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)
Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию отображения к каждому входному элементу перед накоплением.- Примечание API:
- Коллекторы
mapping()наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора дляgroupingByилиpartitioningBy. Например, для потокаPerson, чтобы накопить набор фамилий жителей каждого города:Map<City, Set<String>> lastNamesByCity = people.stream().collect( groupingBy(Person::getCity, mapping(Person::getLastName, toSet()))); - Параметры типа:
T— тип входных элементовU— тип элементов, принимаемых последующим коллекторомA— промежуточный тип накопления последующего коллектораR— тип результата коллектора- Параметры:
-
mapper— функция, применяемая к входным элементам -
downstream— коллектор, принимающий отображённые значения - Возвращает:
- коллектор, применяющий функцию отображения к входным элементам и передающий полученные значения последующему коллектору
flatMapping
public static <T,U,A,R> Collector<T,?,R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream)
Collector, принимающий элементы типа U, для приёма элементов типа T, применяя функцию плоского отображения к каждому входному элементу перед накоплением. Функция плоского отображения преобразует входной элемент в stream, содержащий ноль или более выходных элементов, которые затем накапливаются последующим коллектором. Каждый отображённый поток closed после передачи его элементов последующему коллектору. (Если отображённый поток null, вместо него используется пустой поток.)- Примечание API:
- Коллекторы
flatMapping()наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора дляgroupingByилиpartitioningBy. Например, для потокаOrder, чтобы накопить набор позиций заказа каждого клиента:Map<String, Set<LineItem>> itemsByCustomerName = orders.stream().collect( groupingBy(Order::getCustomerName, flatMapping(order -> order.getLineItems().stream(), toSet()))); - Параметры типа:
T— тип входных элементовU— тип элементов, принимаемых последующим коллекторомA— промежуточный тип накопления последующего коллектораR— тип результата коллектора- Параметры:
-
mapper— функция, применяемая к входным элементам и возвращающая поток результатов -
downstream— коллектор, принимающий элементы потока, возвращённого mapper - Возвращает:
- коллектор, применяющий функцию отображения к входным элементам и передающий результаты плоского отображения последующему коллектору
- С версии:
- 9
filtering
public static <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> downstream)
Collector для приёма элементов того же типа T, применяя предикат к каждому входному элементу и накапливая элемент, только если предикат возвращает true.- Примечание API:
- Коллекторы
filtering()наиболее полезны при использовании в многоуровневом свёртывании, например в качестве последующего коллектора дляgroupingByилиpartitioningBy. Например, для потокаEmployee, чтобы накопить сотрудников каждого отдела, чья зарплата превышает заданный порог:
Коллектор фильтрации отличается от операцииMap<Department, Set<Employee>> wellPaidEmployeesByDepartment = employees.stream().collect( groupingBy(Employee::getDepartment, filtering(e -> e.getSalary() > 2000, toSet())));filter()потока. Предположим, в этом примере в некотором отделе нет сотрудников, чья зарплата превышает порог. Использование показанного выше коллектора фильтрации приведёт к тому, что этот отдел будет сопоставлен с пустымSet. Если вместо этого выполнить операциюfilter()потока, для этого отдела соответствия не будет. - Параметры типа:
T— тип входных элементовA— промежуточный тип накопления последующего коллектораR— тип результата коллектора- Параметры:
-
predicate— предикат, применяемый к входным элементам -
downstream— коллектор, принимающий значения, соответствующие предикату - Возвращает:
- коллектор, применяющий предикат к входным элементам и передающий соответствующие ему элементы последующему коллектору
- С версии:
- 9
collectingAndThen
public static <T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
Collector для выполнения дополнительного преобразования на завершающем этапе. Например, можно адаптировать коллектор toList(), чтобы он всегда создавал неизменяемый список: List<String> list = people.stream().collect(
collectingAndThen(toList(),
Collections::unmodifiableList));
- Параметры типа:
T— тип входных элементовA— промежуточный тип накопления последующего коллектораR— тип результата последующего коллектораRR— тип результата результирующего коллектора- Параметры:
-
downstream— коллектор -
finisher— функция, применяемая к конечному результату последующего коллектора - Возвращает:
- коллектор, выполняющий действие последующего коллектора, а затем дополнительный завершающий этап
counting
public static <T> Collector<T,?,Long> counting()
Collector, принимающий элементы типа T и подсчитывающий количество входных элементов. Если элементов нет, результат равен 0.- Требования к реализации:
- Результат эквивалентен следующему:
reducing(0L, e -> 1L, Long::sum) - Параметры типа:
T— тип входных элементов- Возвращает:
Collector, подсчитывающий входные элементы
minBy
public static <T> Collector<T, ?, Optional<T>> minBy(Comparator<? super T> comparator)
Collector, который находит минимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.- Требования к реализации:
- Результат эквивалентен следующему:
reducing(BinaryOperator.minBy(comparator)) - Параметры типа:
T— тип входных элементов- Параметры:
-
comparator—Comparatorдля сравнения элементов - Возвращает:
Collector, возвращающий минимальное значение
maxBy
public static <T> Collector<T, ?, Optional<T>> maxBy(Comparator<? super T> comparator)
Collector, который находит максимальный элемент согласно заданному Comparator, представленному в виде Optional<T>.- Требования к реализации:
- Результат эквивалентен следующему:
reducing(BinaryOperator.maxBy(comparator)) - Параметры типа:
T— тип входных элементов- Параметры:
-
comparator—Comparatorдля сравнения элементов - Возвращает:
Collector, возвращающий максимальное значение
summingInt
public static <T> Collector<T,?,Integer> summingInt(ToIntFunction<? super T> mapper)
Collector, который вычисляет сумму значений целочисленной функции, применённой к входным элементам. Если элементов нет, результат равен 0.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая суммируемое свойство - Возвращает:
Collector, вычисляющий сумму производного свойства
summingLong
public static <T> Collector<T,?,Long> summingLong(ToLongFunction<? super T> mapper)
Collector, который вычисляет сумму значений функции типа long, применённой к входным элементам. Если элементов нет, результат равен 0.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая суммируемое свойство - Возвращает:
Collector, вычисляющий сумму производного свойства
summingDouble
public static <T> Collector<T,?,Double> summingDouble(ToDoubleFunction<? super T> mapper)
Collector, который вычисляет сумму значений функции типа double, применённой к входным элементам. Если элементов нет, результат равен 0. Возвращаемая сумма может зависеть от порядка обработки значений из-за накопления ошибок округления при сложении значений разных порядков величины. Сортировка значений по возрастанию абсолютной величины обычно повышает точность результата. Если какое-либо обработанное значение является NaN или сумма в какой-либо момент становится NaN, итоговая сумма будет NaN.
- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая суммируемое свойство - Возвращает:
Collector, вычисляющий сумму производного свойства
averagingInt
public static <T> Collector<T,?,Double> averagingInt(ToIntFunction<? super T> mapper)
Collector, который вычисляет среднее арифметическое значений целочисленной функции, применённой к входным элементам. Если элементов нет, результат равен 0.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая усредняемое свойство - Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства
averagingLong
public static <T> Collector<T,?,Double> averagingLong(ToLongFunction<? super T> mapper)
Collector, который вычисляет среднее арифметическое значений функции типа long, применённой к входным элементам. Если элементов нет, результат равен 0.- Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая усредняемое свойство - Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства
averagingDouble
public static <T> Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
Collector, который вычисляет среднее арифметическое значений функции типа double, применённой к входным элементам. Если элементов нет, результат равен 0. Возвращаемое среднее может зависеть от порядка обработки значений из-за накопления ошибок округления при сложении значений разных порядков величины. Сортировка значений по возрастанию абсолютной величины обычно повышает точность результата. Если какое-либо обработанное значение является NaN или сумма в какой-либо момент становится NaN, итоговое среднее будет NaN.
- Примечание по реализации:
- Формат
doubleпозволяет представить все последовательные целые числа в диапазоне от -253 до 253. Если конвейер содержит более 253 значений, делитель при вычислении среднего будет ограничен значением 253, что приведёт к дополнительным численным ошибкам. - Параметры типа:
T— тип входных элементов- Параметры:
-
mapper— функция, извлекающая усредняемое свойство - Возвращает:
Collector, вычисляющий среднее арифметическое производного свойства
reducing
public static <T> Collector<T,?,T> reducing(T identity, BinaryOperator<T> op)
Collector, выполняющий свёртывание входных элементов с помощью заданного BinaryOperator и указанного начального значения.- Примечание API:
- Коллекторы
reducing()наиболее полезны при использовании в многоуровневом свёртывании, послеgroupingByилиpartitioningBy. Для простого свёртывания потока используйте вместо этогоStream.reduce(Object, BinaryOperator). - Параметры типа:
T— тип элементов на входе и выходе свёртывания- Параметры:
-
identity— начальное значение свёртывания (оно же значение, возвращаемое при отсутствии входных элементов) -
op—BinaryOperator<T>, используемый для свёртывания входных элементов - Возвращает:
Collector, реализующий операцию свёртывания- См. также:
reducing
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. Для простого отображения с последующим свёртыванием потока используйте вместо этого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, реализующий операцию отображения с последующим свёртыванием- См. также:
groupingBy
public static <T,K> Collector<T, ?, Map<K,List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
Collector, реализующий операцию группировки входных элементов типа T по классифицирующей функции и возвращающий результаты в Map. Классифицирующая функция сопоставляет элементы ключам некоторого типа K. Коллектор создаёт Map<K, List<T>>, ключами которого являются значения, полученные при применении классифицирующей функции к входным элементам, а соответствующими значениями — List, содержащие входные элементы, сопоставленные с соответствующим ключом этой функцией.
Тип, изменяемость, возможность сериализации и потокобезопасность возвращаемых объектов Map и List не гарантируются.
- Требования к реализации:
- Результат аналогичен следующему:
groupingBy(classifier, toList()); - Примечание по реализации:
- Возвращаемый
Collectorне является конкурентным. В конвейерах параллельных потоков функцияcombinerобъединяет ключи одной карты с другой, что может быть затратной операцией. Если сохранять порядок элементов в результирующем коллектореMapне требуется, использованиеgroupingByConcurrent(Function)может повысить производительность при параллельной обработке. - Параметры типа:
T— тип входных элементовK— тип ключей- Параметры:
-
classifier— функция классификации, сопоставляющая входные элементы ключам - Возвращает:
Collector, реализующий операцию группировки- См. также:
groupingBy
public static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает Map<K, D>.
Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.
Например, чтобы вычислить множество фамилий людей в каждом городе:
Map<City, Set<String>> namesByCity
= people.stream().collect(
groupingBy(Person::getCity,
mapping(Person::getLastName,
toSet())));
- Примечание по реализации:
- Возвращаемый
Collectorне является конкурентным. В конвейерах параллельных потоков функцияcombinerвыполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если сохранять порядок передачи элементов последующему коллектору не требуется, использованиеgroupingByConcurrent(Function, Collector)может обеспечить более высокую производительность при параллельной обработке. - Параметры типа:
T— тип входных элементовK— тип ключейA— промежуточный тип накопления последующего коллектораD— тип результата последующей редукции- Параметры:
-
classifier— функция-классификатор, сопоставляющая входным элементам ключи -
downstream—Collector, реализующий последующую редукцию - Возвращает:
Collector, реализующий каскадную операцию группировки- См. также:
groupingBy
public static <T, K, D, A, M extends Map<K,D>> Collector<T,?,M> groupingBy(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. Map, создаваемый коллектором, создается с помощью предоставленной функции-фабрики. Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает Map<K, D>.
Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:
Map<City, Set<String>> namesByCity
= people.stream().collect(
groupingBy(Person::getCity,
TreeMap::new,
mapping(Person::getLastName,
toSet())));
- Примечание по реализации:
- Возвращаемый
Collectorне является конкурентным. В конвейерах параллельных потоков функцияcombinerвыполняет слияние ключей одной карты с другой, что может быть затратной операцией. Если сохранять порядок передачи элементов последующему коллектору не требуется, использованиеgroupingByConcurrent(Function, Supplier, Collector)может обеспечить более высокую производительность при параллельной обработке. - Параметры типа:
T— тип входных элементовK— тип ключейD— тип результата последующей редукцииA— промежуточный тип накопления последующего коллектораM— тип результирующегоMap- Параметры:
-
classifier— функция-классификатор, сопоставляющая входным элементам ключи -
mapFactory— поставщик нового пустогоMap, в который будут помещены результаты -
downstream—Collector, реализующий последующую редукцию - Возвращает:
Collector, реализующий каскадную операцию группировки- См. также:
groupingByConcurrent
public static <T,K> Collector<T, ?, ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T, ? extends K> classifier)
Collector, реализующий операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации. Это коллектор с характеристиками concurrent и unordered.
Функция классификации сопоставляет элементам ключ некоторого типа K. Коллектор создает ConcurrentMap<K, List<T>>, ключами которой являются значения, полученные при применении функции классификации к входным элементам, а соответствующие значения — это Listы, содержащие входные элементы, сопоставленные связанному ключу функцией классификации.
Тип, изменяемость и сериализуемость возвращаемых объектов ConcurrentMap или List, а также потокобезопасность возвращаемых объектов List не гарантируются.
- Требования к реализации:
- Результат аналогичен следующему:
groupingByConcurrent(classifier, toList()); - Параметры типа:
T— тип входных элементовK— тип ключей- Параметры:
-
classifier— функция-классификатор, сопоставляющая входным элементам ключи - Возвращает:
- конкурентный неупорядоченный
Collector, реализующий операцию группировки - См. также:
groupingByConcurrent
public static <T,K,A,D> Collector<T, ?, ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)
Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. Это коллектор с характеристиками concurrent и unordered.
Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает ConcurrentMap<K, D>.
Тип, изменяемость и сериализуемость возвращаемого ConcurrentMap не гарантируются.
Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(
groupingByConcurrent(Person::getCity,
mapping(Person::getLastName,
toSet())));
- Параметры типа:
T— тип входных элементовK— тип ключейA— промежуточный тип накопления последующего коллектораD— тип результата последующей редукции- Параметры:
-
classifier— функция-классификатор, сопоставляющая входным элементам ключи -
downstream—Collector, реализующий последующую редукцию - Возвращает:
- конкурентный неупорядоченный
Collector, реализующий каскадную операцию группировки - См. также:
groupingByConcurrent
public static <T, K, A, D, M extends ConcurrentMap<K,D>> Collector<T,?,M> groupingByConcurrent(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)
Collector, реализующий каскадную операцию «группировки по» для входных элементов типа T: элементы группируются согласно функции классификации, после чего для значений, связанных с заданным ключом, выполняется операция редукции с использованием указанного последующего Collector. ConcurrentMap, создаваемый коллектором, создается с помощью предоставленной функции-фабрики. Это коллектор с характеристиками concurrent и unordered.
Функция классификации сопоставляет элементам ключ некоторого типа K. Последующий коллектор обрабатывает элементы типа T и создает результат типа D. Результирующий коллектор создает ConcurrentMap<K, D>.
Например, чтобы вычислить множество фамилий людей в каждом городе, отсортировав названия городов:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(
groupingByConcurrent(Person::getCity,
ConcurrentSkipListMap::new,
mapping(Person::getLastName,
toSet())));
- Параметры типа:
T— тип входных элементовK— тип ключейA— промежуточный тип накопления последующего коллектораD— тип результата последующей редукцииM— тип результирующегоConcurrentMap- Параметры:
-
classifier— функция-классификатор, сопоставляющая входным элементам ключи -
mapFactory— поставщик нового пустогоConcurrentMap, в который будут помещены результаты -
downstream—Collector, реализующий последующую редукцию - Возвращает:
- конкурентный неупорядоченный
Collector, реализующий каскадную операцию группировки - См. также:
partitioningBy
public static <T> Collector<T, ?, Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)
Collector, который разделяет входные элементы согласно Predicate и организует их в Map<Boolean, List<T>>. Возвращаемый Map всегда содержит отображения для обоих ключей — false и true. Тип, изменяемость, сериализуемость и потокобезопасность возвращаемых Map или List не гарантируются.- Примечание к API:
- Если раздел не содержит элементов, его значением в результирующей Map будет пустой List.
- Параметры типа:
T— тип входных элементов- Параметры:
-
predicate— предикат, используемый для классификации входных элементов - Возвращает:
Collector, реализующий операцию разделения- См. также:
partitioningBy
public static <T,D,A> Collector<T, ?, Map<Boolean,D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream)
Collector, который разделяет входные элементы согласно Predicate, редуцирует значения в каждом разделе с помощью другого Collector и организует их в Map<Boolean, D>, значения которого являются результатами последующей редукции. Возвращаемый Map всегда содержит отображения для обоих ключей — false и true. Тип, изменяемость, сериализуемость и потокобезопасность возвращаемого Map не гарантируются.
- Примечание к API:
- Если раздел не содержит элементов, его значение в результирующей Map будет получено вызовом функции-поставщика последующего коллектора с последующим применением функции-финишера.
- Параметры типа:
T— тип входных элементовD— тип результата последующей редукцииA— промежуточный тип накопления последующего коллектора- Параметры:
-
predicate— предикат, используемый для классификации входных элементов -
downstream—Collector, реализующий последующую редукцию - Возвращает:
Collector, реализующий каскадную операцию разделения- См. также:
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, будет выброшено 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, будет выброшено 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, представляющий собой композицию двух нижестоящих сборщиков. Каждый элемент, переданный результирующему сборщику, обрабатывается обоими нижестоящими сборщиками, после чего их результаты объединяются указанной функцией слияния в итоговый результат. Функции результирующего сборщика выполняют следующие действия:
- supplier: создаёт контейнер результата, содержащий контейнеры результатов, полученные вызовом функции supplier каждого сборщика
- accumulator: вызывает accumulator каждого сборщика с его контейнером результата и входным элементом
- combiner: вызывает combiner каждого сборщика с двумя контейнерами результатов
- finisher: вызывает finisher каждого сборщика с его контейнером результата, затем вызывает предоставленную функцию объединения и возвращает её результат.
Результирующий сборщик имеет характеристику 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/stream/Collectors.html