Ответ
Метод flatMap преобразует каждый элемент исходного потока в новый поток, а затем объединяет ("разворачивает") все эти потоки в один плоский поток.
При применении к объекту, содержащему List<Long>, flatMap извлекает этот список и создает из его элементов единый Stream<Long>.
Пример:
class Container {
List<Long> values = List.of(10L, 20L, 30L);
}
Container container = new Container();
List<Long> result = Stream.of(container)
.flatMap(c -> c.values.stream()) // Преобразуем Container в Stream<Long>
.collect(Collectors.toList());
// result = [10, 20, 30]
Важные моменты:
- Обработка
null: Если списокvaluesможет бытьnull, это вызоветNullPointerException. Необходима защита:.flatMap(c -> c.values != null ? c.values.stream() : Stream.empty()) - Пустой список: Если список пуст,
flatMapпросто не добавит элементов в результирующий поток. - Глубина:
flatMapработает на один уровень вложенности. Для структур видаList<List<Long>>потребуется цепочкаflatMap.