我有一个List<Employee>
。现在我想将它们汇总为每个年龄段的员工人数。
就像在那个员工名单中,有 3 名 21 岁的员工。还有 2 名 25 岁的员工。
所以我想展示Map<Integer,Long>
一下
{
21:3,
25:2
}
我知道我可以使用 来做到这一点Collectors.groupingBy
。但出于好奇,我想知道如何使用Collectors.toMap
方法。我尝试了下面的代码。
代码
@GetMapping("api/test/groupingby/age")
public Map<Integer,Long> testtest2(){
Optional<List<Employee>> optEmployees = service.getAllEmployees();
List<Employee> lsEmployees = optEmployees.map(ls->ls).orElseThrow();
lsEmployees.stream().map(emp->emp.getAge()).
collect(Collectors.
toMap(age->age, Collectors.counting(),(e1,e2)->e1,LinkedHashMap::new));
return null;
}
它给了我以下编译时错误..
您可以使用
toMap
接受合并函数的变体:keyMapper
。Employee
valueMapper
,1
这样第一次遇到某个年龄键时,它被赋予值1
。mergeFunction
同一键出现多次的情况。在这种情况下,添加两个相同键的值可确保生成的映射将每个年龄映射到Employee
具有该年龄的 s 的数量。