Stream.collect()
Собирает элементы потока в коллекцию, строку или другую структуру.
Доступно с: Java 8
Синтаксис
<R, A> R collect(Collector<? super T, A, R> collector)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| collector | Collector<? super T, A, R> | Способ сбора, обычно из класса `Collectors`. |
Возвращаемое значение
RРезультат сборщика: список, множество, словарь, строка или число.
Примеры
Разные сборщики:
void main() {
List<String> words = List.of("java", "stream", "api", "java");
Set<String> unique = words.stream().collect(Collectors.toCollection(TreeSet::new));
String joined = words.stream().collect(Collectors.joining(", "));
Map<Integer, Long> byLength = words.stream()
.collect(Collectors.groupingBy(String::length, TreeMap::new, Collectors.counting()));
IO.println(unique);
IO.println(joined);
IO.println(byLength);
}Результат:
[api, java, stream]
java, stream, api, java
{3=1, 4=2, 6=1}Примечания
Готовые сборщики лежат в java.util.stream.Collectors — этот пакет в компактном файле Java 25 импортирован автоматически. Для простого списка с Java 16 короче toList(). Сборщики можно вкладывать друг в друга: второй аргумент groupingBy() — тоже сборщик.
См. также
- Stream.toList() — Собирает элементы потока в неизменяемый список.
- Collectors.toMap() — Сборщик, который строит словарь из элементов потока.
- Collectors.groupingBy() — Сборщик, который раскладывает элементы по группам с общим ключом.
- Collectors.joining() — Сборщик, который склеивает строки потока в одну.
В учебнике
- Коллекторы — Метод collect и класс Collectors — toList, toSet, toMap, joining, counting, summingInt, averagingDouble и ошибка повторяющегося ключа.