如何解决使用collectors.groupingby修改过滤器方法
我正在读取.txt文件,然后尝试根据薪资范围对员工进行分组。然后显示员工人数和该组的平均工资。到目前为止,我已经尝试过使用list.stream()。filter方法。但是,我需要使用collectors.groupingBy以及collectors.summarizingDouble()和collectors.average()方法对它们进行分组。但是我似乎做不到。到目前为止,这是我所做的,
getSalary方法:
public BigDecimal getSalary() {
return Salary;
}
驱动程序类:
Map<Object,Long> avgSalary=
employee_list.stream().collect(Collectors.groupingBy(emp->emp.getSalary().doubleValue() < 30000,Collectors.counting()));
Set<Entry<Object,Long>> entrySet = avgSalary.entrySet();
for (Entry<Object,Long> entry : entrySet)
{
System.out.println(entry.getKey()+" : "+entry.getValue());
}
我非常感谢您提供一些帮助,以collectors.groupuingBy()替换filter方法。输出如下:
40000-50000:2:平均工资:44000
解决方法
您应该使用Collectors.summarizingDouble
并清楚地建立每个小组:
Map<String,DoubleSummaryStatistics> result = employee_list.stream()
.collect(Collectors.groupingBy(emp ->
emp.getSalary().doubleValue() < 30000 ?
"<30000" :
emp.getSalary().doubleValue() < 40000 ?
"30000-40000" :
emp.getSalary().doubleValue() < 50000 ?
"40000-50000" :
">50000",Collectors.summarizingDouble(emp -> emp.getSalary().doubleValue())));
然后,只需按键即可访问每个组,即"40000-50000"
并获取其统计信息:
DoubleSummaryStatistics stats40k50k = result.get("40000-50000");
每个组的所有统计信息都收集到DoubleSummaryStatistics
个对象中,您可以从中获取平均值,即:
double avg40k50k = stats40k50k == null ? 0.0 : stats40k50k.getAverage();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。