gpt4 book ai didi

java - 以功能 react 方式合并 2 个列表

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:38 25 4
gpt4 key购买 nike

让我们想象以下对象:

class People {
public int id;
public String name;
public Date dateOfDeath;
}

我有 2 个人员列表。

在第一个中,People 对象正确设置了 ID 和 NAME。在第二个中,People 对象正确设置了 ID 和 DATEOFDEATH。

我需要合并这 2 个列表,以便拥有一个包含完整人物对象(姓名和死亡日期)的列表。

以完整的程序方式,这可以通过像这样的双 for 循环来完成:

for (People fullPeople : firstList) {
for (People peopleWithDateOfDeath : secondList) {
if (peopleWithDateOfDeath.id == fullPeople.id) {
fullPeople.dateOfDeath = peopleWithDateOfDeath.dateOfDeath;
break;
}
}
}
secondList = null;
// first list is good :)

我怎样才能以实用的方式实现它?我正在使用 Rx-Java,但任何使用 Java 8 Streams 的示例都可以轻松转换。

最佳答案

您可以通过构建 iddateOfDeath 的映射来避免 O(n2) 复杂度:

Map<Integer, Date> deaths = secondList.stream()
.collect(toMap(p -> p.id, p -> p.dateOfDeath));

fullPeople.stream()
.filter(p -> deaths.containsKey(p.id))
.forEach(p -> p.dateOfDeath = deaths.get(p.id));

或者,如果你想避免改变现有的人:

List<People> mergedPeople = fullPeople.stream()
.map(p -> deaths.containsKey(p.id)
? new People(p.id, p.name, deaths.get(p.id))
: p
).collect(toList());

关于java - 以功能 react 方式合并 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200955/

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