Метод toCollection
Метод toCollection класса Collectors
собирает элементы потока в коллекцию,
создаваемую переданным поставщиком.
В параметр мы передаем Supplier -
функцию, которая при вызове возвращает
новый пустой экземпляр нужной коллекции.
Метод возвращает коллектор, который
можно передать в терминальную операцию
collect.
Чаще всего в качестве поставщика используют
ссылки на конструкторы:
ArrayList::new, LinkedList::new,
TreeSet::new, ArrayDeque::new
и другие. Это позволяет точно управлять
типом итоговой коллекции, в отличие от
готовых коллекторов toList и toSet.
Синтаксис
Collectors.toCollection(Supplier<C> collectionFactory)
Пример
Давайте соберем элементы потока в ArrayList:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> res = List.of("a", "b", "c", "d", "e")
.stream()
.collect(Collectors.toCollection(ArrayList::new));
System.out.println(res);
}
}
Результат выполнения кода:
[a, b, c, d, e]
Пример
Давайте соберем элементы потока в TreeSet,
чтобы получить отсортированное множество:
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
Set<Integer> res = List.of(3, 1, 5, 2, 4)
.stream()
.collect(Collectors.toCollection(TreeSet::new));
System.out.println(res);
}
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте соберем элементы потока в LinkedList,
сохранив порядок следования:
import java.util.LinkedList;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
LinkedList<String> res = List.of("a", "b", "c", "d", "e")
.stream()
.collect(Collectors.toCollection(LinkedList::new));
System.out.println(res);
}
}
Результат выполнения кода:
[a, b, c, d, e]
Пример
Давайте соберем только четные числа потока
в ArrayDeque:
import java.util.ArrayDeque;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
ArrayDeque<Integer> res = List.of(1, 2, 3, 4, 5)
.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toCollection(ArrayDeque::new));
System.out.println(res);
}
}
Результат выполнения кода:
[2, 4]
Смотрите также
-
класс
Collectors,
который содержит коллекторы для потоков -
метод
toList,
который собирает элементы в список -
метод
toSet,
который собирает элементы в множество -
метод
toMap,
который собирает элементы в карту