Collector.toList()
вернет вам пустой список.
Вот реализация:
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
Как видите, ArrayList::new
используется в качестве контейнера для ваших предметов.
Редактировать
Я вижу здесь много сомнений, поэтому я прочитал JavaDoc и поделился с вами:
Из JavaDoc Сборщик :
открытый интерфейс Collector
Изменяемая операция сокращения, которая
накапливает входные элементы в изменяемый контейнер результатов , опционально
преобразование накопленного результата в окончательное представление после
все элементы ввода были обработаны. Сокращение операций может быть
выполняется последовательно или параллельно.
Коллектор определяется четырьмя функциями, которые работают вместе для
накапливать записи в изменяемый контейнер результатов и, при необходимости,
выполнить окончательное преобразование результата. Это:
И
Последовательная реализация сокращения с использованием коллектора
создать отдельный контейнер результатов с помощью функции поставщика и
вызвать функцию аккумулятора один раз для каждого элемента ввода.
параллельная реализация разделит входные данные, создаст результат
контейнер для каждого раздела , накапливайте содержимое каждого
разделить подрезультат для этого раздела, а затем использовать
функция объединения для объединения подрезультатов в объединенный результат.
Так что, пока вы не делаете странные вещи, такие как возвращение функции объединения null
, Collector
всегда возвращает по крайней мере mutable container
, используя предоставленную вам функцию supplier
.
И я думаю, что это очень нелогично, если реализация когда-нибудь вернет null
контейнер.