你能说出几种集合的排序方式?
1 个回答
世间万物,唯有过往伤人最深。冰心月使用一个包含“员工姓名”和“工资”字段的 `Employee` 类,按姓名升序排序,如果姓名相同则按工资升序排序。 ### 1. 实现 `Comparable` 接口 让 `Employee` 类实现 `Comparable` 接口,定义默认的排序规则。 ```java public class Employee implements Comparable<Employee> { private String name; private double salary; @Override public int compareTo(Employee o) { int flag = this.name.compareTo(o.name); if (flag == 0) { flag = Double.compare(this.salary, o.salary); } return flag; } } // 使用默认排序规则 Collections.sort(employees); ``` ### 2. 使用 `Comparator` 接口 借助 `Comparator` 比较器指定排序规则,这样可以灵活控制排序。 ```java public class Employee { private String name; private double salary; } Collections.sort(employees, (e1, e2) -> { int flag = e1.getName().compareTo(e2.getName()); if (flag == 0) { flag = Double.compare(e1.getSalary(), e2.getSalary()); } return flag; }); // 使用 Comparator 的简化写法 Collections.sort(employees, Comparator.comparing(Employee::getName).thenComparingDouble(Employee::getSalary)); ``` ### 3. 使用 `Stream` API Java 8 的 `Stream` API 提供了 `sorted()` 方法,可以直接对流中的元素进行排序。 ```java public class Employee { private String name; private double salary; } // 如果 Employee 实现了 Comparable List<Employee> sortedEmployees = employees.stream().sorted().collect(Collectors.toList()); // 如果 Employee 没有实现 Comparable List<Employee> sortedEmployees = employees.stream() .sorted((e1, e2) -> { int flag = e1.getName().compareTo(e2.getName()); if (flag == 0) { flag = Double.compare(e1.getSalary(), e2.getSalary()); } return flag; }).collect(Collectors.toList()); ``` **总结**:可以使用 `Comparable` 接口、`Comparator` 比较器或 `Stream` API 对集合进行排序,按需求灵活选择不同的方式。发布于 2024-11-09 19:01 •IP属地 四川举报评论收藏
公众号进入网站体验更佳

