我有对象列表。每个对象都保存一个 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 来实现相同的目的?
如果您从
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
元素来创建所需的笛卡尔积。