将保存不同对象的两个不同列表组合到保存对象的第三个列表中,作为两个列表的交叉连接

问题描述 投票:0回答:1

我有对象列表。每个对象都保存一个 Long 列表和一个 JsonNode 列表。 我想做的是使用对象创建第三个列表,其中每个对象都是上述两个列表之间交叉连接的结果。

例如

class MyClass{
    List<Long> _listLong;
    List<JsonNode> _listJsonNode;
}

我有 MyClass 对象列表。我想要的是创建一个 MyClass 列表。

class MyClass2{
    Long id;
    JsonNode jsonNode;
}

使得

List<MyClass2>
保存
List<Long>
List<JsonNode>
交叉连接的结果。

我可以使用循环做同样的事情。 有没有办法在 Java 中使用 Streams 来实现相同的目的?

java list lambda java-stream
1个回答
1
投票

如果您从

MyClass
对象列表开始,则必须将其展平并为笛卡尔积使用两个嵌套流。

List<MyClass2> result = myClassList.stream().flatMap(
   mc -> mc.get_listLong()
                .stream()
                .flatMap(i -> mc.get_listJsonNode()
                                .stream()
                                .map(js -> new MyClass2(i, js))))
        .collect(Collectors.toList());

假设构造函数

MyClass2(Long, JsonNode)
存在。内部
flatMap
通过本质上迭代每个
JsonNode
元素的所有
Long
元素来创建所需的笛卡尔积。

© www.soinside.com 2019 - 2024. All rights reserved.