如何使用groupby/Lambda 因此,我试图通过总结工资和收入来获得前5名的部门 还试图在一个部门中排名前五的员工,比如销售人员

如何使用groupby/Lambda 因此,我试图通过总结工资和收入来获得前5名的部门 还试图在一个部门中排名前五的员工,比如销售人员,lambda,java-8,Lambda,Java 8,如何在Java8中使用groupBy,然后进行求和和排序 这是我掌握的数据 Emp(“迈克尔”,“销售”,20000.0) Emp(“Jean”,“营销”,250000.0) 环境管理计划(“杰森”,“商业发展”,220000.0) 按工资总额排列的前五名部门: public class Emp { public String name; public String department; public double salary; public Emp(St

如何在Java8中使用groupBy,然后进行求和和排序

这是我掌握的数据

Emp(“迈克尔”,“销售”,20000.0)
Emp(“Jean”,“营销”,250000.0)
环境管理计划(“杰森”,“商业发展”,220000.0)

按工资总额排列的前五名部门:

public class Emp {

    public String name;
    public String department;
    public double salary;

    public Emp(String name, String department, double salary) {

        this.name = name;
        this.department = department;
        this.salary = salary;
    }
}
List top5Departments=employees.stream()
.collect(收集器).groupingBy(e->e.department,
催收员。总和双倍(e->e.salary)))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue().reversed())
.限额(5)
.map(map.Entry::getKey)
.collect(Collectors.toList());
按特定部门薪资排名前五的员工:

List<String> top5Departments = employees.stream()
    .collect(Collectors.groupingBy(e -> e.department,
                 Collectors.summingDouble(e -> e.salary)))
    .entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue().reversed())
    .limit(5)
    .map(Map.Entry::getKey)
    .collect(Collectors.toList());
列出top5SalesEmployees=employees.stream()
.过滤器(e->“销售”。等于(e.部门))
.sorted(Comparator.comparingDouble(e->e.salary).reversed())
.限额(5)
.collect(Collectors.toList());

按工资总额排列的前五名部门:

public class Emp {

    public String name;
    public String department;
    public double salary;

    public Emp(String name, String department, double salary) {

        this.name = name;
        this.department = department;
        this.salary = salary;
    }
}
List top5Departments=employees.stream()
.collect(收集器).groupingBy(e->e.department,
催收员。总和双倍(e->e.salary)))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue().reversed())
.限额(5)
.map(map.Entry::getKey)
.collect(Collectors.toList());
按特定部门薪资排名前五的员工:

List<String> top5Departments = employees.stream()
    .collect(Collectors.groupingBy(e -> e.department,
                 Collectors.summingDouble(e -> e.salary)))
    .entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue().reversed())
    .limit(5)
    .map(Map.Entry::getKey)
    .collect(Collectors.toList());
列出top5SalesEmployees=employees.stream()
.过滤器(e->“销售”。等于(e.部门))
.sorted(Comparator.comparingDouble(e->e.salary).reversed())
.限额(5)
.collect(Collectors.toList());

我考虑直接将其放入支持按值排序的
映射中。这种东西在jdk中不存在,但在
guava
中就存在。因此,您的解决方案可以如下所示:

List<Emp> top5SalesEmployees = employees.stream()
    .filter(e -> "sales".equals(e.department))
    .sorted(Comparator.comparingDouble(e -> e.salary).reversed())
    .limit(5)
    .collect(Collectors.toList());
Map Map=employees.stream().collect(
收集器.CollectionAndThen(收集器.groupingBy)(Emp::getDepartment,
收集器.summingDouble(Emp::getSalary)),
x->ImmutableMap.builder()
.putAll(x)
.orderEntriesByValue(比较器.比较((双d)->d).reversed())
.build());
map.entrySet().stream().map(map.Entry::getValue).limit(5).forEach(System.out::println);

这并不比已经提供的解决方案好,只是可以这样做。

我考虑直接将其放入支持按值排序的
映射中。这种东西在jdk中不存在,但在
guava
中就存在。因此,您的解决方案可以如下所示:

List<Emp> top5SalesEmployees = employees.stream()
    .filter(e -> "sales".equals(e.department))
    .sorted(Comparator.comparingDouble(e -> e.salary).reversed())
    .limit(5)
    .collect(Collectors.toList());
Map Map=employees.stream().collect(
收集器.CollectionAndThen(收集器.groupingBy)(Emp::getDepartment,
收集器.summingDouble(Emp::getSalary)),
x->ImmutableMap.builder()
.putAll(x)
.orderEntriesByValue(比较器.比较((双d)->d).reversed())
.build());
map.entrySet().stream().map(map.Entry::getValue).limit(5).forEach(System.out::println);

这并不是比已经提供的解决方案更好,只是可以这样做。

我想你需要编写一些代码。你的问题很模糊。如果我没有弄错的话,你基本上是想按最高工资对部门进行分组,然后取前5名?是的,我该如何使用java 8实现这一点?除了“使用数据库”将是非常糟糕的无绩效。为什么
部门
字符串
?我想你需要编写一些代码。你的问题很模糊。如果我没有弄错的话,你基本上是想按最高工资对部门进行分组,然后排名前5位?是的,我该如何使用java 8来实现这一点?除了”“使用数据库”将是可怕的无效。为什么
department
a
String