默认情况下,Collections sort()
方法将给定的列表按升序(或者自然顺序)排序。
我们可以使用 Collections.reverseOrder() 方法,它返回一个 Comparator,进行反向排序。
on
it
road
.com
Java 使用比较器自定义排序
sort()
方法中的第二个参数采用 Comparator
的一个实例。
我们可以在比较器的帮助下实现任何类型的比较逻辑,然后我们可以使用 sort()
方法根据给定的自定义逻辑对列表进行排序。
Collections.sort(List, Comparator);
我们可以为每种排序需求创建一个单独的 Comparator
实例,然后我们可以组合这些实例来创建分组排序效果。
例如,如果我们想根据三个字段 id、name 和 age 对 Employee 列表进行排序。
在这种情况下,我们需要创建 3 个 Comparator
实例。
Java创建自定义的排序比较器
这是在 Java 中创建 Comparator 的通用语法。
在这种情况下,我们将创建一个 Comparator
,它将按 id
字段对 Employee 列表进行排序。
Comparator<Employee> compareById = new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getId().compareTo(o2.getId()); } }; Comparator<Employee> compareByName = new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getName().compareTo(o2.getName()); } };
我们还可以使用 lambda 表达式来进一步缩短语法。
//Id Comparator Comparator<Employee> compareById = (Employee o1, Employee o2) -> o1.getId().compareTo( o2.getId() ); //Name Comparator Comparator<Employee> compareByName = (Employee o1, Employee o2) -> o1.getName().compareTo( o2.getName() );
使用刚创建的比较器进行排序
ArrayList<Employee> employees = getUnsortedEmployeeList(); Comparator<Employee> compareById = (Employee o1, Employee o2) -> o1.getId().compareTo( o2.getId() ); Collections.sort(employees, compareById); Collections.sort(employees, compareById.reversed());
自然顺序和逆序排序
Collections.sort(list); // 自然排序 Collections.sort(list, Collections.reverseOrder()); // 倒序排序
- 上述方法将指定的“列表”项目按其自然顺序排序。
- 所有项目都必须实现 Comparable 接口。
- 所有项目必须相互比较,并且不应抛出
ClassCastException
。 - 这种排序保证是稳定的。这意味着相等的元素不会因排序而重新排序。
- 指定的
list
必须是可修改的,但不需要可调整大小。 sort()
不返回任何值。
Java 对字符串的 ArrayList 进行排序
按字典顺序排序:
List<String> names = Arrays.asList("JackLi", "Lucie", "BobRobert", "Tomm"); //Prints - [JackLi, BobRobert, Lucie, Tomm] Collections.sort(names); //Prints - [Tomm, Lucie, BobRobert, JackLi] Collections.sort(names, Collections.reverseOrder());
Java按字段对对象的 ArrayList 进行排序
我们可能需要对自定义对象列表进行排序,这些自定义对象可以有自己的排序逻辑。
在这种情况下,在自定义类中实现 Comparator
接口。
public class Employee implements Comparable<Employee>{ private Integer id; private String name; private String email; private LocalDate dateOfBirth; //Getters and Setters @Override public int compareTo(Employee e) { return this.getName().compareTo(e.getName()); } }
Nest Java 程序按名称对 Employee 对象列表进行排序;
ArrayList<Employee> employees = methodReturnsUnsortedList(); //Narutal order sorting Collections.sort(employees); //Reverse sorting Collections.sort(employees, Collections.reverseOrder());
日期:2020-09-17 00:09:33 来源:oir作者:oir