gpt4 book ai didi

java - 如何使用 Java 8 流和 lambda 迭代和处理值是元素列表的映射的值

转载 作者:行者123 更新时间:2023-12-03 23:18:04 25 4
gpt4 key购买 nike

要点:我们正在尝试尽可能使用 Java 8 流和 lambda 重写旧的 Java 代码。

问题:我有一个映射,其键是一个字符串,值是用户定义对象的列表。

Map<String, List<Person>> personMap = new HashMap<String, List<Person>>();
personMap.put("A", Arrays.asList(person1, person2, person3, person4));
personMap.put("B", Arrays.asList(person5, person6, person7, person8));

这里的人是根据他们名字的起始字符分组的。

我想为 map 中的每个键查找列表中人员的平均年龄。

同样,我尝试了很多在 stackoverflow 中提到的东西,但没有一个与我的情况相匹配,或者很少有语法不工作。

提前致谢!

最佳答案

您没有具体说明您希望如何(或是否)存储年龄,所以目前我只将其作为打印语句。然而,它就像迭代 Map 中的每个条目并打印每个 List 的平均值一样简单(在将 Person 对象映射到他们的年龄之后):

personMap.forEach((k, v) -> {
System.out.println("Average age for " + k + ": " + v.stream().mapToInt(Person::getAge).average().orElse(-1));
});

如果您想将它存储在另一个 Map 中,那么您可以很容易地将它收集到一个:

personMap.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()
.stream()
.mapToInt(Person::getAge)
.average()
.orElse(-1)));

注意:如果没有平均值,则返回-1,这假设 Person 中存在名为 getAge 的 getter 方法,返回一个 int

关于java - 如何使用 Java 8 流和 lambda 迭代和处理值是元素列表的映射的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50055216/

25 4 0
文章推荐: javascript - 如何在使用 JavaScript 时预选