【问题标题】:Create a list of all lists in an array with Java streams [duplicate]使用Java流创建数组中所有列表的列表[重复]
【发布时间】:2016-06-20 07:59:02
【问题描述】:

我有一个 Node 数组,它们都有一个 Variable 列表:

Node[] arguments; // argument[i].vars() returns List<Variable>

我想创建一个包含所有变量的列表。我今天是这样做的:

List<Variable> allVars = new ArrayList<>();
for (Node arg : arguments) {
    allVars.addAll(arg.vars());
}

我可以使用流做同样的事情吗?

我已经尝试过了,但它返回给我一个List&lt;List&lt;Variable&gt;&gt;,而我想要一个带有所有列表元素的List&lt;Variable&gt;(使用addAll):

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

【问题讨论】:

  • 你也可以用Stream.of(arguments)代替Arrays.asList(arguments).stream()

标签: java arraylist collections java-stream


【解决方案1】:

在调用collect之前,使用flatMapStream&lt;List&lt;Variable&gt;&gt;转换为Stream&lt;Variable&gt;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2015-11-19
    • 2021-02-27
    相关资源
    最近更新 更多