程序无法对员工列表进行排序
Program Can't sort Employee List
我正在制作一个 java 程序,该程序使用根据薪水对员工进行排序的流。
程序如下:-
public class EmployeeMain {
public static void main(String[] args) {
Employee e1 = new Employee(10000, "Adam");
Employee e2 = new Employee(5000, "Peter");
Employee e3 = new Employee(14000, "Robin");
List<Employee> list = Arrays.asList(e1, e2, e3);
Collections.sort(list,
(emp1, emp2) -> e1.getSalary() > e2.getSalary() ? 1 : e2.getSalary() > e1.getSalary() ? -1 : 0);
list.stream().forEach(System.out::println);
}
}
这段代码的输出是:-
Employee [salary=10000, name=Adam]
Employee [salary=5000, name=Peter]
Employee [salary=14000, name=Robin]
这段代码有什么问题?
您在排序方法的正文中输入错误。
您没有使用 emp1
和 emp2
,而是使用了 e1
和 e2
,它们是您在上面实例化的员工的实例。
所以基本上你写的东西被评估为:
Collections.sort(list, (emp1, emp2) -> 10000 > 5000 ? 1 : 5000 > 10000 ? -1 : 0)
这是
Collections.sort(list, (emp1, emp2) -> 1)
你要写的是
Collections.sort(list, (emp1, emp2) -> emp1.getSalary() > emp2.getSalary() ? 1 : emp2.getSalary() > emp1.getSalary() ? -1 : 0);
或shorter/better,如评论中所述
list.sort(Comparator.comparingInt(Employee::getSalary));
我正在制作一个 java 程序,该程序使用根据薪水对员工进行排序的流。 程序如下:-
public class EmployeeMain {
public static void main(String[] args) {
Employee e1 = new Employee(10000, "Adam");
Employee e2 = new Employee(5000, "Peter");
Employee e3 = new Employee(14000, "Robin");
List<Employee> list = Arrays.asList(e1, e2, e3);
Collections.sort(list,
(emp1, emp2) -> e1.getSalary() > e2.getSalary() ? 1 : e2.getSalary() > e1.getSalary() ? -1 : 0);
list.stream().forEach(System.out::println);
}
}
这段代码的输出是:-
Employee [salary=10000, name=Adam]
Employee [salary=5000, name=Peter]
Employee [salary=14000, name=Robin]
这段代码有什么问题?
您在排序方法的正文中输入错误。
您没有使用 emp1
和 emp2
,而是使用了 e1
和 e2
,它们是您在上面实例化的员工的实例。
所以基本上你写的东西被评估为:
Collections.sort(list, (emp1, emp2) -> 10000 > 5000 ? 1 : 5000 > 10000 ? -1 : 0)
这是
Collections.sort(list, (emp1, emp2) -> 1)
你要写的是
Collections.sort(list, (emp1, emp2) -> emp1.getSalary() > emp2.getSalary() ? 1 : emp2.getSalary() > emp1.getSalary() ? -1 : 0);
或shorter/better,如评论中所述
list.sort(Comparator.comparingInt(Employee::getSalary));