Объединить сбор списка с одним значением с использованием потоков
У меня есть следующие данные:
CustomClass first = new CustomClass(1, Arrays.asList(1, 2, 3));
CustomClass second = new CustomClass(5, Arrays.asList(6,7,8));
List<CustomClass> list = Arrays.asList(first, second);
Теперь я хочу собрать эти данные в список, содержащий значение из CustomClass
и значения из его списка.
Я хочу получить это: 1, 1, 2, 3, 5, 6, 7, 8
Это то, что я реализовал:
list.stream().forEach(item -> {
result.add(item.value);
item.values.stream().forEach(seconditem -> result.add(seconditem));
});
Я знаю, что есть метод сбора для потока, но я не понимаю, как использовать его для сбора как одного значения, так и списка значений из того же класса.
Ответы
Ответ 1
Вы можете использовать Stream.concat
, чтобы объединить Stream.of
одно значение и поток других значений:
List<Integer> result = list.stream()
.flatMap(x -> Stream.concat(Stream.of(x.value), x.values.stream()))
.collect(Collectors.toList());