让我们想象一下以下对象:合并2只列出了一个功能性反应方式
class People {
public int id;
public String name;
public Date dateOfDeath;
}
我有2名人名单。
在第一个中,People对象的ID和NAME已正确设置。在第二个中,People对象的ID和DATEOFDEATH正确设置。
我需要结合2个列表才能有一个完整的People对象(名称和死亡日期)的单个列表。
在一个完整的程序办法,这可能是与双来完成的循环是这样的:
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的例子都很容易转换。
感谢这个干净的例子。按照程序的方式,可以通过删除任何已经匹配的人来优化内部循环,以避免必须更深入地搜索日期列表。在我的情况下,这可以帮助很多,因为我知道这两个列表都将在ID上排序。任何方式在功能上做同样的优化? – pdegand59
@ pdegand59 Misha的答案可以为你做到这一点:你可以调用'deaths.remove(p.id)'而不是'deaths.get(p.id)'。 – Tunaki