添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Java 如何排序对象列表

默认情况下,Collections sort() 方法将给定的列表按升序(或者自然顺序)排序。
我们可以使用 Collections.reverseOrder() 方法,它返回一个 Comparator,进行反向排序。

on .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());