gpt4 book ai didi

java - Collectors.toMap 在与未用作值的对象不同的属性上编写合并函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:08 27 4
gpt4 key购买 nike

我需要创建 Map<String, String>来自 List<Person>使用 Stream API。

persons.stream()
.collect(Collectors
.toMap(Person::getNationality, Person::getName, (name1, name2) -> name1)

但在上述情况下,我想通过使用人员的年龄来解决名称属性中的冲突。有没有办法在 (age1, age2) -> // if age1 is greater than age2 return name1, else return name2 行附近传递合并函数? ?

最佳答案

要根据年龄选择一个人,您需要 Person 实例来查询年龄。在将 Person 映射到普通名称 String 后,您无法重新构造信息。

所以你必须先收集这些人,以便能够选择最老的,然后将他们映射到他们的名字:

persons.stream()
.collect(Collectors.groupingBy(Person::getNationality, Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparingInt(Person::getAge)),
o -> o.get().getName())));

关于java - Collectors.toMap 在与未用作值的对象不同的属性上编写合并函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561887/

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