Java 使用收集器修改筛选器方法。groupingby
我在读一个.txt文件,然后我试图根据工资范围对员工进行分组。然后显示该组的员工人数和平均工资。到目前为止,我尝试的是使用list.stream().filter方法。但是,我需要使用collectors.groupingBy和collectors.summaringdouble()和collectors.average()方法对它们进行分组。但我似乎做不到。以下是我迄今为止所做的工作,Java 使用收集器修改筛选器方法。groupingby,java,collectors,Java,Collectors,我在读一个.txt文件,然后我试图根据工资范围对员工进行分组。然后显示该组的员工人数和平均工资。到目前为止,我尝试的是使用list.stream().filter方法。但是,我需要使用collectors.groupingBy和collectors.summaringdouble()和collectors.average()方法对它们进行分组。但我似乎做不到。以下是我迄今为止所做的工作, getSalary方法: public BigDecimal getSalary() { r
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());
}
Map avgSalary=
employee_list.stream().collect(Collectors.groupingBy(emp->emp.getSalary().doubleValue()<30000,Collectors.counting());
Set entrySet=avgSalary.entrySet();
for(条目:entrySet)
{
System.out.println(entry.getKey()+“:”+entry.getValue());
}
如果您能帮我用Collector.groupuingBy()替换filter方法,我将不胜感激。输出可以如下所示:您应该清楚地使用和建立每个组:
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())));
每个组的所有统计数据都收集到对象中,您可以从中获得平均值:
double avg40k50k = stats40k50k == null ? 0.0 : stats40k50k.getAverage();
但是我遇到了一些错误,我不得不按照eclipse的建议将Map更改为Map。并且emp.getSalary也显示了一个错误,表示类型表达式必须是函数接口。上面的部分可以工作,但在最后一行,
double avg40k50k=stats40k50k==null?“0.0”:stats40k50k.getAverage()代码>显示0.0以下的错误,表示无法从字符串转换为双精度
double avg40k50k = stats40k50k == null ? 0.0 : stats40k50k.getAverage();