Предположим, что у нас есть список следующим образом. CoreResult
имеет поле типа List<Double>
.
final List<CoreResult> list = new LinkedList<>(SOME_DATA);
Цель состоит в том, чтобы сгладить список после извлечения этого конкретного поля из каждого объекта CoreResult
.
Вот три возможных варианта. Кто-нибудь из них предпочтительнее других?
Вариант 1: извлеките поле через map()
и сгладьте внутри коллектора
final List<Double> A = list.stream().map(CoreResult::getField)
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
Вариант 2: извлечение поля через map()
, сглаживание через flatMap()
, простой сборщик
final List<Double> B = list.stream().map(CoreResult::getField)
.flatMap(Collection::stream).collect(Collectors.toList());
Вариант 3: извлечение поля и сглаживание за один раз через flatMap()
, простой сборщик
final List<Double> C = list.stream().flatMap(
x -> x.getField().stream()).collect(Collectors.toList());
Будет ли ответ другим, если нет необходимости извлекать какое-либо поле из CoreResult, и вместо этого нужно просто сгладить List<List<Double>>
?