Класс Collectors
- java.lang.Object
-
- java.util.stream.Collectors
public final class Collectors extends Object
Реализации Collector, которые реализуют различные полезные операции сокращения, такие как накопление элементов в коллекции, суммирование элементов по различным критериям и т. д.
Ниже приведены примеры использования предопределённых коллекторов для выполнения общих задач по мутабельному сокращению:
// Accumulate names into a List
List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());
// Accumulate names into a TreeSet
Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
// Convert elements to strings and concatenate them, separated by commas
String joined = things.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
// Compute sum of salaries of employee
int total = employees.stream()
.collect(Collectors.summingInt(Employee::getSalary)));
// Group employees by department
Map<Department, List<Employee>> byDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
// Compute sum of salaries by department
Map<Department, Integer> totalByDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
// Partition students into passing and failing
Map<Boolean, List<Student>> passingFailing =
students.stream()
.collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
- С момента:
- 1.8
Методы
| Модификатор и тип | Метод и описание |
|---|---|
static <T> Collector<T,?,Double> |
averagingDouble(ToDoubleFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,Double> |
averagingInt(ToIntFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,Double> |
averagingLong(ToLongFunction<? super T> mapper) Возвращает |
static <T,A,R,RR> Collector<T,A,RR> |
collectingAndThen(Collector<T,A,R> downstream,
Function<R,RR> finisher) Адаптирует |
static <T> Collector<T,?,Long> |
counting() Возвращает |
static <T,K> Collector<T,?,Map<K,List<T>>> |
groupingBy(Function<? super T,? extends K> classifier) Возвращает |
static <T,K,A,D> Collector<T,?,Map<K,D>> |
groupingBy(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream) Возвращает |
static <T,K,D,A,M extends Map<K,D>> |
groupingBy(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream) Возвращает |
static <T,K> Collector<T,?,ConcurrentMap<K,List<T>>> |
groupingByConcurrent(Function<? super T,? extends K> classifier) Возвращает конкурентный |
static <T,K,A,D> Collector<T,?,ConcurrentMap<K,D>> |
groupingByConcurrent(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream) Возвращает конкурентный |
static <T,K,A,D,M extends ConcurrentMap<K,D>> |
groupingByConcurrent(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream) Возвращает конкурентный |
static Collector<CharSequence,?,String> |
joining() Возвращает |
static Collector<CharSequence,?,String> |
joining(CharSequence delimiter) Возвращает |
static Collector<CharSequence,?,String> |
joining(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix) Возвращает |
static <T,U,A,R> Collector<T,?,R> |
mapping(Function<? super T,? extends U> mapper,
Collector<? super U,A,R> downstream) Адаптирует |
static <T> Collector<T,?,Optional<T>> |
maxBy(Comparator<? super T> comparator) Возвращает |
static <T> Collector<T,?,Optional<T>> |
minBy(Comparator<? super T> comparator) Возвращает |
static <T> Collector<T,?,Map<Boolean,List<T>>> |
partitioningBy(Predicate<? super T> predicate) Возвращает |
static <T,D,A> Collector<T,?,Map<Boolean,D>> |
partitioningBy(Predicate<? super T> predicate,
Collector<? super T,A,D> downstream) Возвращает |
static <T> Collector<T,?,Optional<T>> |
reducing(BinaryOperator<T> op) Возвращает |
static <T> Collector<T,?,T> |
reducing(T identity,
BinaryOperator<T> op) Возвращает |
static <T,U> Collector<T,?,U> |
reducing(U identity,
Function<? super T,? extends U> mapper,
BinaryOperator<U> op) Возвращает |
static <T> Collector<T,?,DoubleSummaryStatistics> |
summarizingDouble(ToDoubleFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,IntSummaryStatistics> |
summarizingInt(ToIntFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,LongSummaryStatistics> |
summarizingLong(ToLongFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,Double> |
summingDouble(ToDoubleFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,Integer> |
summingInt(ToIntFunction<? super T> mapper) Возвращает |
static <T> Collector<T,?,Long> |
summingLong(ToLongFunction<? super T> mapper) Возвращает |
static <T,C extends Collection<T>> |
toCollection(Supplier<C> collectionFactory) Возвращает |
static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> |
toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper) Возвращает конкурентный |
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) Возвращает конкурентный |
static <T,K,U,M extends ConcurrentMap<K,U>> |
toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) Возвращает конкурентный |
static <T> Collector<T,?,List<T>> |
toList() Возвращает |
static <T,K,U> Collector<T,?,Map<K,U>> |
toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper) Возвращает |
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) Возвращает |
static <T,K,U,M extends Map<K,U>> |
toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) Возвращает |
static <T> Collector<T,?,Set<T>> |
toSet() Возвращает |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы
toCollection
public static <T,C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)
Возвращает Collector, который накапливает входные элементы в новый Collection, в порядке их встречи. Collection создаётся предоставленной фабрикой.
- Параметры типа:
-
T- тип входных элементов -
C- тип результирующегоCollection - Параметры:
-
collectionFactory-Supplier, возвращающий новый, пустойCollectionсоответствующего типа - Возвращает:
Collector, который собирает все входные элементы вCollection, в порядке их встречи
toList
public static <T> Collector<T,?,List<T>> toList()
Возвращает Collector , который накапливает входные элементы в новый List. Нет гарантий по типу, изменяемости, сериализуемости или потокобезопасности возвращаемого List; если требуется больший контроль над возвращаемым List, используйте toCollection(Supplier).
- Параметры типа:
-
T- тип входных элементов - Возвращает:
Collector, который собирает все входные элементы вList, в порядке их встречи
toSet
public static <T> Collector<T,?,Set<T>> toSet()
Возвращает Collector , который накапливает входные элементы в новый Set. Нет гарантий по типу, изменяемости, сериализуемости или потокобезопасности возвращаемого Set; если требуется больший контроль над возвращаемым Set, используйте toCollection(Supplier).
Это unordered коллектор.
- Параметры типа:
-
T- тип входных элементов - Возвращает:
Collector, который собирает все входные элементы вSet
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- коллектор, который будет принимать сопоставленные значения - Возвращает:
- коллектор, который применяет функцию отображения к входным элементам и предоставляет сопоставленные результаты последующему коллектору
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> people
= 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 , который производит сумму длинной функции, применённой к входным элементам. Если элементов нет, результат — 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, который вычисляет среднее арифметическое значения функции от типа double, примененной к элементам ввода. Если элементов нет, результат равен 0.
Возвращаемое среднее значение может отличаться в зависимости от порядка записи значений из-за накопленной ошибки округления при сложении значений с различными порядками величины. Значения, отсортированные по возрастанию абсолютного значения, как правило, дают более точные результаты. Если любое записанное значение является NaN, или сумма в какой-либо момент является NaN, то среднее значение будет NaN.
- Примечание по реализации:
- Формат
doubleможет представлять все последовательные целые числа в диапазоне от -253 до 253. Если в потоке более 253 значений, делитель в вычислении среднего значения насыщается при значении 253, что приводит к дополнительным числовым ошибкам. - Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция, извлекающая свойство для суммирования - Возвращает:
Collector, который производит сумму производного свойства
reducing
public static <T> Collector<T,?,T> reducing(T identity,
BinaryOperator<T> op) Возвращает Collector, который выполняет редукцию своих входных элементов под заданной BinaryOperator, используя предоставленное тождество.
- Примечание API:
- Коллекторы
reducing()наиболее полезны при использовании в многоуровневой редукции, последующей заgroupingByилиpartitioningBy. Для выполнения простой редукции над потоком используйтеStream.reduce(Object, BinaryOperator)вместо этого. - Параметры типа:
-
T- тип элемента для ввода и вывода редукции - Параметры:
-
identity- значение тождества для редукции (также значение, возвращаемое при отсутствии входных элементов) -
op-BinaryOperator<T>используемый для редукции входных элементов - Возвращает:
Collector, который реализует операцию редукции- См. также:
-
reducing(BinaryOperator),reducing(Object, Function, BinaryOperator)
reducing
public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)
Возвращает Collector, который выполняет редукцию своих входных элементов под заданной BinaryOperator. Результат описывается как Optional<T>.
- Примечание API:
- Коллекторы
reducing()наиболее полезны при использовании в многоуровневой редукции, последующей заgroupingByилиpartitioningBy. Для выполнения простой редукции над потоком используйтеStream.reduce(BinaryOperator)вместо этого.Например, учитывая поток
Person, чтобы вычислить самого высокого человека в каждом городе:Comparator<Person> byHeight = Comparator.comparing(Person::getHeight); Map<City, Person> tallestByCity = people.stream().collect(groupingBy(Person::getCity, reducing(BinaryOperator.maxBy(byHeight)))); - Параметры типа:
-
T- тип элемента для ввода и вывода редукции - Параметры:
-
op-BinaryOperator<T>используемый для редукции входных элементов - Возвращает:
Collector, который реализует операцию редукции- См. также:
-
reducing(Object, BinaryOperator),reducing(Object, Function, BinaryOperator)
reducing
public static <T,U> Collector<T,?,U> reducing(U identity,
Function<? super T,? extends U> mapper,
BinaryOperator<U> op) Возвращает Collector, который выполняет редукцию своих входных элементов под заданной функцией преобразования и BinaryOperator. Это обобщение reducing(Object, BinaryOperator), которое позволяет преобразовать элементы перед редукцией.
- Примечание API:
- Коллекторы
reducing()наиболее полезны при использовании в многоуровневой редукции, последующей заgroupingByилиpartitioningBy. Для выполнения простой операции map-reduce над потоком используйтеStream.map(Function)иStream.reduce(Object, BinaryOperator)вместо этого.Например, учитывая поток
Person, чтобы вычислить самую длинную фамилию жителей в каждом городе:Comparator<String> byLength = Comparator.comparing(String::length); Map<City, String> longestLastNameByCity = people.stream().collect(groupingBy(Person::getCity, reducing(Person::getLastName, BinaryOperator.maxBy(byLength)))); - Параметры типа:
-
T- тип входных элементов -
U- тип преобразованных значений - Параметры:
-
identity- значение тождества для редукции (также значение, возвращаемое при отсутствии входных элементов) -
mapper- функция преобразования, применяемая к каждому входному значению -
op-BinaryOperator<U>используемый для редукции преобразованных значений - Возвращает:
Collector, реализующий операцию map-reduce- См. также:
-
reducing(Object, BinaryOperator),reducing(BinaryOperator)
groupingBy
public static <T,K> Collector<T,?,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)
Возвращает Collector, реализующий операцию "группировка по" над входными элементами типа T, группируя элементы в соответствии с функцией классификации и возвращая результаты в Map.
Функция классификации сопоставляет элементы с некоторым типом ключа K. Коллектор производит Map<K, List<T>>, ключами которого являются значения, полученные в результате применения функции классификации к входным элементам, а соответствующие значениями являются List содержащими входные элементы, которые сопоставляются с соответствующим ключом в соответствии с функцией классификации.
Гарантий по типу, мутабельности, сериализуемости или потокобезопасности возвращаемых объектов Map или List нет.
- Требования к реализации:
- Это дает результат, подобный:
groupingBy(classifier, toList());
- Примечание по реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для параллельных потоковых конвейеров функцияcombinerработает путем слияния ключей из одной карты в другую, что может быть дорогостоящей операцией. Если сохранение порядка, в котором элементы появляются в результирующемMapколлекторе, не требуется, использованиеgroupingByConcurrent(Function)может обеспечить лучшую параллельную производительность. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей - Параметры:
-
classifier- функция классификатора, сопоставляющая входные элементы с ключами - Возвращает:
Collector, реализующий операцию группировки- См. также:
-
groupingBy(Function, Collector),groupingBy(Function, Supplier, Collector),groupingByConcurrent(Function)
groupingBy
public static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream) Возвращает Collector, реализующий каскадную операцию "группировка по" над входными элементами типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию редукции над значениями, связанными с заданным ключом, используя указанный последующий Collector.
Функция классификации сопоставляет элементы с некоторым типом ключа K. Последующий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит Map<K, D>.
Гарантий по типу, мутабельности, сериализуемости или потокобезопасности возвращаемого Map нет.
Например, для вычисления набора фамилий людей в каждом городе:
Map<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity,
mapping(Person::getLastName, toSet())));
- Примечание по реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для параллельных потоковых конвейеров функцияcombinerработает путем слияния ключей из одной карты в другую, что может быть дорогостоящей операцией. Если сохранение порядка, в котором элементы представляются последующему коллектору, не требуется, использованиеgroupingByConcurrent(Function, Collector)может обеспечить лучшую параллельную производительность. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления последующего коллектора -
D- тип результата последующей редукции - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами -
downstream-Collector, реализующий последующую редукцию - Возвращает:
Collector, реализующий каскадную операцию группировки- См. также:
-
groupingBy(Function),groupingBy(Function, Supplier, Collector),groupingByConcurrent(Function, Collector)
groupingBy
public static <T,K,D,A,M extends Map<K,D>> Collector<T,?,M> groupingBy(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream) Возвращает Collector, реализующий каскадную операцию "группировка по" над входными элементами типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию редукции над значениями, связанными с заданным ключом, используя указанный последующий Collector. Map производимый коллектором, создается с помощью предоставленной фабричной функции.
Функция классификации сопоставляет элементы с некоторым типом ключа K. Последующий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит Map<K, D>.
Например, для вычисления набора фамилий людей в каждом городе, где имена городов отсортированы:
Map<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity, TreeMap::new,
mapping(Person::getLastName, toSet())));
- Примечание реализации:
- Возвращаемый
Collectorне является потокобезопасным. Для параллельных потоковых конвейеров функцияcombinerработает путём слияния ключей из одной карты в другую, что может быть дорогостоящей операцией. Если порядок, в котором элементы представляются входящему коллектору, не требуется, использованиеgroupingByConcurrent(Function, Supplier, Collector)может обеспечить лучшую производительность в параллельном режиме. - Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления входящего коллектора -
D- тип результата входящего сокращения -
M- тип результирующегоMap - Параметры:
-
classifier- функция классификатора, отображающая входные элементы в ключи -
downstream-Collector, реализующая входящее сокращение -
mapFactory- функция, которая, при вызове, создаёт новую пустуюMapнужного типа - Возвращает:
Collector, реализующая каскадную операцию группировки- См. также:
-
groupingBy(Function, Collector),groupingBy(Function),groupingByConcurrent(Function, Supplier, Collector)
groupingByConcurrent
public static <T,K> Collector<T,?,ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T,? extends K> classifier)
Возвращает потокобезопасный Collector, реализующий операцию "группировки по" для входных элементов типа T, группируя элементы в соответствии с функцией классификации.
Это concurrent и unordered коллектор.
Функция классификации сопоставляет элементы с ключом типа K. Коллектор производит ConcurrentMap<K, List<T>> , ключи которого являются результатом применения функции классификации к входным элементам, а соответствующие значения — это List содержащие входные элементы, которые сопоставляются с соответствующим ключом в соответствии с функцией классификации.
Гарантий по типу, изменяемости, сериализуемости объектов Map или List, возвращаемых, или по потоковой безопасности возвращаемых объектов List нет.
- Требования к реализации:
- Это приводит к результату, подобному:
groupingByConcurrent(classifier, toList());
- Параметры типа:
-
T- тип входных элементов -
K- тип ключей - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами - Возвращает:
- потокобезопасный, неупорядоченный
Collector, реализующий операцию группировки - См. также:
-
groupingBy(Function),groupingByConcurrent(Function, Collector),groupingByConcurrent(Function, Supplier, Collector)
groupingByConcurrent
public static <T,K,A,D> Collector<T,?,ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream) Возвращает потокобезопасный Collector , реализующий каскадную операцию "группировки по" для входных элементов типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения значений, связанных с заданным ключом, используя указанный входящий Collector.
Это concurrent и unordered коллектор.
Функция классификации сопоставляет элементы с ключом типа K. Входящий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит Map<K, D>.
Например, для вычисления набора фамилий людей в каждом городе, где названия городов отсортированы:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(groupingByConcurrent(Person::getCity,
mapping(Person::getLastName, toSet())));
- Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления входящего коллектора -
D- тип результата входящего сокращения - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами -
downstream-Collector, реализующая входящее сокращение - Возвращает:
- потокобезопасный, неупорядоченный
Collector, реализующий каскадную операцию группировки - См. также:
-
groupingBy(Function, Collector),groupingByConcurrent(Function),groupingByConcurrent(Function, Supplier, Collector)
groupingByConcurrent
public static <T,K,A,D,M extends ConcurrentMap<K,D>> Collector<T,?,M> groupingByConcurrent(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream) Возвращает потокобезопасный Collector , реализующий каскадную операцию "группировки по" для входных элементов типа T, группируя элементы в соответствии с функцией классификации, а затем выполняя операцию сокращения значений, связанных с заданным ключом, используя указанный входящий Collector. ConcurrentMap , созданный коллектором, создаётся с помощью предоставленной фабричной функции.
Это concurrent и unordered коллектор.
Функция классификации сопоставляет элементы с ключом типа K. Входящий коллектор работает с элементами типа T и производит результат типа D. Результирующий коллектор производит Map<K, D>.
Например, для вычисления набора фамилий людей в каждом городе, где названия городов отсортированы:
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity, ConcurrentSkipListMap::new,
mapping(Person::getLastName, toSet())));
- Параметры типа:
-
T- тип входных элементов -
K- тип ключей -
A- промежуточный тип накопления входящего коллектора -
D- тип результата входящего сокращения -
M- тип результирующегоConcurrentMap - Параметры:
-
classifier- функция классификации, сопоставляющая входные элементы с ключами -
downstream-Collector, реализующая входящее сокращение -
mapFactory- функция, которая, при вызове, создаёт новую пустуюConcurrentMapнужного типа - Возвращает:
- потокобезопасный, неупорядоченный
Collector, реализующий каскадную операцию группировки - См. также:
-
groupingByConcurrent(Function),groupingByConcurrent(Function, Collector),groupingBy(Function, Supplier, Collector)
partitioningBy
public static <T> Collector<T,?,Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)
Возвращает Collector , который разделяет входные элементы в соответствии с Predicate, и организует их в Map<Boolean, List<T>>. Гарантий по типу, изменяемости, сериализуемости или потоковой безопасности возвращаемого Map нет.
- Параметры типа:
-
T- тип входных элементов - Параметры:
-
predicate- предикат, используемый для классификации входных элементов - Возвращает:
Collector, реализующий операцию разделения- См. также:
partitioningBy(Predicate, Collector)
partitioningBy
public static <T,D,A> Collector<T,?,Map<Boolean,D>> partitioningBy(Predicate<? super T> predicate,
Collector<? super T,A,D> downstream) Возвращает Collector , который разделяет входные элементы в соответствии с Predicate, выполняет сокращение значений в каждом разделе в соответствии с другим Collector, и организует их в Map<Boolean, D> , значениями которого являются результаты входящего сокращения.
Гарантий по типу, изменяемости, сериализуемости или потоковой безопасности возвращаемого Map нет.
- Параметры типа:
-
T- тип входных элементов -
A- промежуточный тип накопления входящего коллектора -
D- тип результата входящего сокращения - Параметры:
-
predicate- предикат, используемый для классификации входных элементов -
downstream-Collector, реализующий входящее сокращение - Возвращает:
Collector, реализующий каскадную операцию разделения- См. также:
partitioningBy(Predicate)
toMap
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper) Возвращает Collector , который накапливает элементы в Map , ключи и значения которого являются результатом применения предоставленных функций отображения к входным элементам.
Если сопоставленные ключи содержат дубликаты (в соответствии с Object.equals(Object)), при выполнении операции сбора выбрасывается IllegalStateException . Если сопоставленные ключи могут иметь дубликаты, используйте toMap(Function, Function, BinaryOperator) вместо этого.
- Примечание API:
- Часто либо ключ, либо значение являются входными элементами. В этом случае полезным может быть вспомогательный метод
Function.identity(). Например, следующее производит отображениеMapстудентов на их средний балл:Map<Student, Double> studentToGPA students.stream().collect(toMap(Functions.identity(), student -> computeGPA(student)));А следующее производит отображениеMapуникального идентификатора на студентов:Map<String, Student> studentIdToStudent students.stream().collect(toMap(Student::getId, Functions.identity()); - Примечание реализации:
- Возвращаемое
Collectorне является конкурентным. Для параллельных потоковых конвейеров функцияcombinerработает путем слияния ключей одной карты в другую, что может быть дорогостоящей операцией. Если не требуется, чтобы результаты вставлялись вMapв порядке их появления, использованиеtoConcurrentMap(Function, Function)может обеспечить лучшую параллельную производительность. - Параметры типа:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключа -
U- тип выходного значения функции отображения значения - Параметры:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений - Возвращаемое значение:
- коллектор
Collector, который собирает элементы вMap, ключи и значения которой являются результатом применения функций отображения к входным элементам - См. также:
-
toMap(Function, Function, BinaryOperator),toMap(Function, Function, BinaryOperator, Supplier),toConcurrentMap(Function, Function)
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)), функция отображения значений применяется к каждому одинаковому элементу, а результаты объединяются с помощью предоставленной функции объединения.
- Примечание API:
- Существует несколько способов обработки коллизий между несколькими элементами, отображающимися на один и тот же ключ. Другие формы
toMapпросто используют функцию объединения, которая безусловно выбрасывает исключение, но вы легко можете написать более гибкие политики объединения. Например, если у вас есть потокPerson, и вы хотите получить «справочник» с отображением имени на адрес, но возможно, что у двух человек одинаковое имя, вы можете сделать следующее, чтобы эффективно обработать эти коллизии и получитьMapсопоставления имен с объединённым списком адресов:Map<String, String> phoneBook people.stream().collect(toMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a)); - Примечание реализации:
- Возвращаемое
Collectorне является конкурентным. Для параллельных потоковых конвейеров функцияcombinerработает путем слияния ключей одной карты в другую, что может быть дорогостоящей операцией. Если не требуется, чтобы результаты сливались вMapв порядке их появления, использованиеtoConcurrentMap(Function, Function, BinaryOperator)может обеспечить лучшую параллельную производительность. - Параметры типа:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключа -
U- тип выходного значения функции отображения значения - Параметры:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений -
mergeFunction- функция объединения, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, как предоставляется вMap.merge(Object, Object, BiFunction) - Возвращаемое значение:
- коллектор
Collector, который собирает элементы вMap, ключи которого являются результатом применения функции отображения ключа к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и их объединения с помощью функции объединения - См. также:
-
toMap(Function, Function),toMap(Function, Function, BinaryOperator, Supplier),toConcurrentMap(Function, Function, BinaryOperator)
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> mapSupplier) Возвращает 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) -
mapSupplier- функция, которая возвращает новую пустуюMapдля вставки результатов - Возвращаемое значение:
- коллектор
Collector, который собирает элементы вMap, ключи которого являются результатом применения функции отображения ключа к входным элементам, а значения — результатом применения функции отображения значений ко всем входным элементам, равным ключу, и их объединения с помощью функции объединения - См. также:
-
toMap(Function, Function),toMap(Function, Function, BinaryOperator),toConcurrentMap(Function, Function, BinaryOperator, Supplier)
toConcurrentMap
public static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper) Возвращает конкурентный Collector для накопления элементов в ConcurrentMap, ключи и значения которого являются результатом применения предоставленных функций отображения к входным элементам.
Если отображенные ключи содержат дубликаты (согласно Object.equals(Object)), при выполнении операции сбора выбрасывается IllegalStateException . Если отображенные ключи могут содержать дубликаты, используйте toConcurrentMap(Function, Function, BinaryOperator) вместо этого.
- Примечание API:
- Часто либо ключ, либо значение являются входными элементами. В этом случае полезным может быть вспомогательный метод
Function.identity(). Например, следующее производит отображениеMapстудентов на их средний балл:Map<Student, Double> studentToGPA students.stream().collect(toMap(Functions.identity(), student -> computeGPA(student)));А следующее производит отображениеMapуникального идентификатора на студентов:Map<String, Student> studentIdToStudent students.stream().collect(toConcurrentMap(Student::getId, Functions.identity());Это
concurrentиunorderedколлектор. - Параметры типа:
-
T- тип входных элементов -
K- тип выходного значения функции отображения ключа -
U- тип выходного значения функции отображения значения - Параметры:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений - Возвращаемое значение:
- конкурентный, неупорядоченный
Collectorколлектор, который собирает элементы вConcurrentMap, ключи которого являются результатом применения функции отображения ключа к входным элементам, а значения — результатом применения функции отображения значения к входным элементам - См. также:
-
toMap(Function, Function),toConcurrentMap(Function, Function, BinaryOperator),toConcurrentMap(Function, Function, BinaryOperator, Supplier)
toConcurrentMap
public static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction) Возвращает конкурирующий Collector , который накапливает элементы в ConcurrentMap, где ключи и значения являются результатом применения предоставленных функций отображения к входным элементам.
Если отображенные ключи содержат дубликаты (согласно Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции объединения.
- Примечание API:
- Существует несколько способов обработки коллизий между несколькими элементами, отображаемыми на один и тот же ключ. Другие формы
toConcurrentMapпросто используют функцию слияния, которая безусловно выбрасывает исключение, но вы можете легко написать более гибкие политики слияния. Например, если у вас есть потокPerson, и вы хотите создать «телефонный справочник», отображающий имя на адрес, но возможно, что у двух человек одинаковые имена, вы можете сделать следующее, чтобы корректно обрабатывать эти коллизии и создаватьMapотображающий имена на конкатенированный список адресов:Map<String, String> phoneBook people.stream().collect(toConcurrentMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a));Это
concurrentиunorderedколлектор. - Параметры типа:
-
T- тип входных элементов -
K- выходной тип функции отображения ключей -
U- выходной тип функции отображения значений - Параметры:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений -
mergeFunction- функция объединения, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, как указано вMap.merge(Object, Object, BiFunction) - Возвращает:
- конкурирующий, неупорядоченный
Collector, который собирает элементы вConcurrentMap, где ключи являются результатом применения функции отображения ключей к входным элементам, а значения - результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции объединения - См. также:
-
toConcurrentMap(Function, Function),toConcurrentMap(Function, Function, BinaryOperator, Supplier),toMap(Function, Function, BinaryOperator)
toConcurrentMap
public static <T,K,U,M extends ConcurrentMap<K,U>> Collector<T,?,M> toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) Возвращает конкурирующий Collector , который накапливает элементы в ConcurrentMap, где ключи и значения являются результатом применения предоставленных функций отображения к входным элементам.
Если отображенные ключи содержат дубликаты (согласно Object.equals(Object)), функция отображения значений применяется к каждому равному элементу, а результаты объединяются с помощью предоставленной функции объединения. ConcurrentMap создается с помощью предоставленной функции поставщика.
Это concurrent и unordered коллектор.
- Параметры типа:
-
T- тип входных элементов -
K- выходной тип функции отображения ключей -
U- выходной тип функции отображения значений -
M- тип результирующегоConcurrentMap - Параметры:
-
keyMapper- функция отображения для создания ключей -
valueMapper- функция отображения для создания значений -
mergeFunction- функция объединения, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, как указано вMap.merge(Object, Object, BiFunction) -
mapSupplier- функция, которая возвращает новый пустойMap, в который будут вставлены результаты - Возвращает:
- конкурирующий, неупорядоченный
Collector, который собирает элементы вConcurrentMap, где ключи являются результатом применения функции отображения ключей к входным элементам, а значения - результатом применения функции отображения значений ко всем входным элементам, равным ключу, и объединения их с помощью функции объединения - См. также:
-
toConcurrentMap(Function, Function),toConcurrentMap(Function, Function, BinaryOperator),toMap(Function, Function, BinaryOperator, Supplier)
summarizingInt
public static <T> Collector<T,?,IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
Возвращает Collector , который применяет функцию отображения, возвращающую целочисленное значение, к каждому входному элементу и возвращает статистику сводки для полученных значений.
- Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция отображения, применяемая к каждому элементу - Возвращает:
Collector, реализующий сокращение сводной статистики- См. также:
-
summarizingDouble(ToDoubleFunction),summarizingLong(ToLongFunction)
summarizingLong
public static <T> Collector<T,?,LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
Возвращает Collector , который применяет функцию отображения, возвращающую значение типа long, к каждому входному элементу и возвращает статистику сводки для полученных значений.
- Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция отображения, применяемая к каждому элементу - Возвращает:
Collector, реализующий сокращение сводной статистики- См. также:
-
summarizingDouble(ToDoubleFunction),summarizingInt(ToIntFunction)
summarizingDouble
public static <T> Collector<T,?,DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
Возвращает Collector , который применяет функцию отображения, возвращающую значение типа double, к каждому входному элементу и возвращает статистику сводки для полученных значений.
- Параметры типа:
-
T- тип входных элементов - Параметры:
-
mapper- функция отображения, применяемая к каждому элементу - Возвращает:
Collector, реализующий сокращение сводной статистики- См. также:
-
summarizingLong(ToLongFunction),summarizingInt(ToIntFunction)
© 1993, 2020, 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.