【发布时间】:2016-01-30 21:14:00
【问题描述】:
让我们假设我有一个员工列表:
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));
}
现在我想要的是生成执行一些过滤的列表,例如: 薪水 > x 和薪水
到目前为止我所做的是:
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>
这里有两个迈克,但现在在这两个迈克中,我想以递减的形式对他们的薪水进行排序,这样新的结果将是:
<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>
除了迈克,我不想更改其他订单
但我无法得到任何人想要的结果 请帮助我解决问题或我需要做些什么才能从这里进一步。谢谢:)
【问题讨论】:
-
是否可以有两个具有相同薪水的迈克(假设出生年份不同)?如果是,你想如何处理它们?
-
是的,两个员工可以同名同薪,不同dob,可以通过hashcode()管理
标签: java sorting lambda java-8 java-stream