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());
添加回答
舉報