假设我有一个员工列表:
private static List<Employee> list = new ArrayList<Employee>();
static {
list.add(new Employee("Joe", 100000, 1980));
list.add(new Employee("Tim", 50000, 1982));
list.add(new Employee("Mike", 90000, 1970));
list.add(new Employee("Rick", 50000, 1955));
list.add(new Employee("Andy", 60000, 1966));
list.add(new Employee("Tim", 10000, 1995));
list.add(new Employee("Tony", 130000, 1991));
list.add(new Employee("Timmy", 150000, 1988));
list.add(new Employee("Rich", 50000, 1980));
list.add(new Employee("Andrew", 160000, 1970));
list.add(new Employee("Ton", 150000, 1958));
list.add(new Employee("Jose", 40000, 1970));
list.add(new Employee("Timothy", 50000, 1996));
list.add(new Employee("Ricardo", 50000, 1988));
list.add(new Employee("Gemasio", 60000, 1971));
list.add(new Employee("Mike", 80000, 1992));
}
现在我想生成一个列表,进行一些过滤,比如:salary>x并且salary<y,并按照员工姓名排序,如果有多个员工姓名相同但薪水不同,则再按照薪水排序。
到目前为止我已经完成的是:
System.out.println(
list.stream()
.filter(e -> e.getSalary() > 55000)
.filter(e -> e.getSalary() < 120000)
.sorted(Comparator.comparing(Employee::getName))
.collect(Collectors.groupingBy(Employee::getName))
);
例如:仅按名称排序后,我得到了以下结果:
<name: Andy salary: 60000 year of birth: 1966>,
<name: Gemasio salary: 60000 year of birth: 1971>,
<name: Joe salary: 100000 year of birth: 1980>,
<name: Mike salary: 90000 year of birth: 1970>,
<name: Mike salary: 80000 year of birth: 1992>
这里有两个 Mike,现在我想按照工资从高到低的顺序对他们进行排序,以得到以下结果:
<name: Andy salary: 60000 year of birth: 1966>,
<name: Gemasio salary: 60000 year of birth: 1971>,
<name: Joe salary: 100000 year of birth: 1980>,
<name: Mike salary: 80000 year of birth: 1970>,
<name: Mike salary: 90000 year of birth: 1992>
除了 Mike,我不想改变其他订单。
但是我没有得到想要的结果,能否有人帮帮我,告诉我哪里出了问题,或者我需要从哪里进一步操作。谢谢 :)