Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用收集器修改筛选器方法。groupingby_Java_Collectors - Fatal编程技术网

Java 使用收集器修改筛选器方法。groupingby

Java 使用收集器修改筛选器方法。groupingby,java,collectors,Java,Collectors,我在读一个.txt文件,然后我试图根据工资范围对员工进行分组。然后显示该组的员工人数和平均工资。到目前为止,我尝试的是使用list.stream().filter方法。但是,我需要使用collectors.groupingBy和collectors.summaringdouble()和collectors.average()方法对它们进行分组。但我似乎做不到。以下是我迄今为止所做的工作, getSalary方法: public BigDecimal getSalary() { r

我在读一个.txt文件,然后我试图根据工资范围对员工进行分组。然后显示该组的员工人数和平均工资。到目前为止,我尝试的是使用list.stream().filter方法。但是,我需要使用collectors.groupingBy和collectors.summaringdouble()和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());
                         }
 
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();