java - Java 8 嵌套列表作为父项中的单例列表
问题描述
public class Parent {
String name;
List<Child> children;
}
public class Child {
String childName;
}
我有这两个类,我的数据集如下所示:
List<Parent> parents = new ArrayList<>();
List<Child> _child1 = new ArrayList<>();
_child1.add(new B("p1c1"));
_child1.add(new B("p1c2"));
_child1.add(new B("p1c3"));
Parent p1 = new Parent("p1", _child1);
parents.add(p1);
List<Child> _child2 = new ArrayList<>();
_child2.add(new B("p2c1"));
Parent p2 = new Parent("p2", _child2);
parents.add(p2);
是否有一些数据可以用来转换如下:
parents[
parent1 {"p1", ["p1c1"]}, parent1 {"p1", ["p1c2"]}, parent1 {"p1", ["p1c3"]},
parent2 {"p2", ["p2c1"]}
]
我想将嵌套列表分解为单例嵌套列表,主要目的是使用 java 8 中的流 api 来实现这一点,您能否建议避免并发修改异常的最佳方法?
解决方案
这应该这样做:
parents.stream()
.flatMap(parent -> parent.getChildren()
.stream()
.map(child -> new SimpleEntry<>(parent, child)))
.map(pair -> new Parent(pair.getKey().getName(),
Arrays.asList(pair.getValue())))
.collect(Collectors.toList());
它只是为每个孩子创建一个父/子对,然后为每个对创建一个新的父级,并将单个孩子添加到children
字段中。然后将其收集到一个Parent
列表中。
推荐阅读
- c# - 设置地理围栏时出现 UWP/C#“访问被拒绝”异常
- android - 如何获取文档 ID 以向其中添加集合 - android studio firestore
- java - Quarkus 在编译/构建时移除未使用的注解,这是我们在运行时需要的
- vuex - 如何在 vuex 商店的 v-for 中改变数组?
- sql - 如何使用 Oracle Query 为给定条件添加设置为“1”的标志?
- c - 是否有必要在函数声明中(用 C 语言)编写 PARAMETER 类型?
- linux - 安排一个 cron 作业来运行一个 ping IP 地址并将其保存到日志文件的脚本
- c# - 使用异步代码时使用 [ThreadStaticAttribute] 缓存 StringBuilder 是否安全?
- javascript - 访问未授予或过期 GMAIL API 和 Oauth2 / 如何使用 GMAIL API 和 GSuite 域设置电子邮件签名
- python - 带有生成器表达式的 Python for 循环对于已经存在的字典是否值得?