我有一个Node
数组,其中都有Variable
列表:
Node[] arguments; // argument[i].vars() returns List<Variable>
我想创建一个包含所有变量的列表。我今天这样做:
List<Variable> allVars = new ArrayList<>();
for (Node arg : arguments) {
allVars.addAll(arg.vars());
}
我可以使用流做同样的事情吗?
我试过这个但是它返回List<List<Variable>>
,而我希望List<Variable>
附加所有列表的元素(使用addAll
):
List<List<Variable>> vars = Arrays.asList(arguments).stream()
.map(Node::vars)
.collect(Collectors.toList());
答案 0 :(得分:4)
在致电Stream<List<Variable>>
之前,使用flatMap
将Stream<Variable>
转换为collect
:
List<Variable> vars = Arrays.asList(arguments).stream()
.map(Node::vars)
.flatMap(List::stream)
.collect(Collectors.toList());