使用Java流创建数组中所有列表的列表

时间:2016-06-20 07:59:03

标签: java arraylist collections java-stream

我有一个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());

1 个答案:

答案 0 :(得分:4)

在致电Stream<List<Variable>>之前,使用flatMapStream<Variable>转换为collect

List<Variable> vars = Arrays.asList(arguments).stream()
                            .map(Node::vars)
                            .flatMap(List::stream)
                            .collect(Collectors.toList());