gpt4 book ai didi

java - 使用java流从另一个对象列表更新对象列表

转载 作者:行者123 更新时间:2023-12-02 08:59:03 25 4
gpt4 key购买 nike

我有一个对象 A 的列表

A{
name
age
dob
}

和对象B的列表

B{
name
dob
}

.

我总是得到 A 的列表,其中 A.dob 为空。以及 B 的列表,其中 B.dob 具有值(value)。我需要循环遍历 A 列表和 B 列表,使用每个 A 和 B 对象中的名称字段查找公共(public)对象,并使用 B.dob 更新 A.dob

这可以使用流来完成吗?

最佳答案

您不应使用 Stream API 来更改对象的状态。

如果你还想修改的话,您可以迭代 A 列表中的每个元素,过滤 dob 是否为 null,根据 B 列表中的相应名称查找 dob。

List<A> aList = new ArrayList<>();
List<B> bList = new ArrayList<>();

aList.stream()
.filter( a -> a.dob == null)
.forEach( a -> {
Predicate<B> nameFilter = b -> b.name.equals(a.name);
a.dob = findDob(nameFilter, bList);
});

static String findDob(Predicate<B> nameFilter, List<B> bList) {
B b = bList.stream()
.filter(nameFilter)
.findFirst()
.orElse(new B());

return b.dob;
}

替代有效解决方案:考虑到每个对象 B 都有唯一的名称,您可以使用该映射准备查找并查找年龄,这样您就不需要迭代 bList 对于 aList

的每次迭代
List<A> aList = new ArrayList<>();
List<B> bList = new ArrayList<>();

Map<String, String> nameDobLookup = bList.stream()
.collect(Collectors.toMap(b -> b.name, b -> b.dob));

aList.stream()
.filter(a -> a.dob == null)
.forEach(a -> a.dob = nameDobLookup.get(a.name));

关于java - 使用java流从另一个对象列表更新对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com