Ответ 1
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:
открытый интерфейс Collector
Изменчивая операция сокращения, которая накапливает входные элементы в изменяемый контейнер результатов, опционально преобразование накопленного результата в окончательное представление после все элементы ввода были обработаны. Сокращение операций может быть выполняется либо последовательно, либо параллельно.
Коллектор определяется четырьмя функциями, которые работают вместе, чтобы накапливать записи в изменяемый контейнер результатов и, при необходимости, выполнить окончательное преобразование результата. Они:
создание нового контейнера результатов (поставщик())
встраивание нового элемента данных в контейнер результатов (аккумулятор())
- объединение двух контейнеров результатов в один (combiner())
- выполнение необязательного финального преобразования для контейнера (finisher())
И
Последовательная реализация сокращения с использованием коллектора будет создать отдельный контейнер результатов с помощью функции поставщика и вызвать функцию аккумулятора один раз для каждого элемента ввода. параллельная реализация будет разделять входные данные, создавать результат контейнер для каждого раздела, накапливать содержимое каждого разделить подрезультат для этого раздела, а затем использовать функция объединения для объединения подрезультатов в объединенный результат.
Так что, пока вы не делаете странные вещи, такие как функция комбинированного возврата null
, Collector
всегда возвращает по крайней мере mutable container
, используя предоставленную вами функцию supplier
.
И я думаю, что это очень нелогично, если реализация когда-нибудь вернет контейнер null
.