2 回答
TA贡献1805条经验 获得超10个赞
有些任务最好用流来完成,而另一些则用迭代来完成。许多任务最好通过结合这两种方法来完成。在此解决方案中,使用流来构建地图,然后使用迭代来更新匹配人员的姓名。您的解决方案以二次时间运行,而此解决方案以线性时间复杂度运行。
Map<String, String> idToNameMap = persons1.stream()
.collect(Collectors.toMap(Person1::getId, Person1::getName, (a, b) -> a));
for (Person person : persons) {
if (idToNameMap.containsKey(person.getId())) {
person.setName(idToNameMap.get(person.getId()));
}
}
TA贡献1810条经验 获得超4个赞
这不是最漂亮的答案等等,但我想它会帮助你了解它是如何工作的。
List<Person> collect = persons.stream()
.filter(person -> persons1.stream().anyMatch(person1 -> person1.getId() == person.getId()))
.map(person -> {
Person1 getted = persons1.stream()
.filter(person1 -> person1.getId() == person.getId())
.findAny()
.orElseGet(null);
if (getted == null) throw new IllegalStateException("Should be Impossible");
person.setName(getted.getName());
return person;
})
.collect(Collectors.toList());
添加回答
举报