Sar*_* MB 2 java functional-programming java-8
要点:我们试图尽可能用java 8流和lambdas重写旧的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));
Run Code Online (Sandbox Code Playgroud)
在这里,人们根据他们的名字的起始角色进行分组.
我想在地图中找到列表中每个键的平均年龄.
同样,我尝试过stackoverflow中提到的很多东西,但没有一个与我的案例匹配,或者很少在语法上不起作用.
提前致谢!
你没有说明你希望如何(或者如果)存储年龄,所以我现在把它作为一个打印声明.然而,它就像迭代每个条目Map并打印每个条目的平均值一样简单List(在将Person对象映射到它们的年龄之后):
personMap.forEach((k, v) -> {
System.out.println("Average age for " + k + ": " + v.stream().mapToInt(Person::getAge).average().orElse(-1));
});
Run Code Online (Sandbox Code Playgroud)
如果您想将它存储在另一个中Map,那么您可以很容易地将它收集到一个:
personMap.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()
.stream()
.mapToInt(Person::getAge)
.average()
.orElse(-1)));
Run Code Online (Sandbox Code Playgroud)
注意:-1如果不存在平均值,则返回,这假设在Person调用内存在getter方法getAge,返回a int.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |