使用流将列表的收集与单个值组合

时间:2017-08-23 08:05:05

标签: java list java-8

我有以下数据:

 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 个答案:

答案 0 :(得分:21)

您可以使用Stream.concat合并List<Integer> result = list.stream() .flatMap(x -> Stream.concat(Stream.of(x.value), x.values.stream())) .collect(Collectors.toList()); 单个值和其他值的流:

<h:form id="transfer_list">
        <ccs:criteriaPanel header="Critère de recherche"
                           filterAction="#{controller.filter()}">
                <form:criteriaForm bean="#{controller.transferCriteria}"
                                   rendered="#{! empty controller.transferSearchForm}"
                                   mode="UPDATE"
                                   controller="#{controller}" />

        </ccs:criteriaPanel>
</h:form>