排序接口 Comparator

排序接口 Comparator

在java中需要对自定义类,具备排序功能,可以实现接口java.util.Comparator

Comparator 接口可以用于对数组、集合等数据结构中的元素进行排序。默认情况下,Comparator 接口按照自然顺序对对象进行比较,即使用对象的 compareTo 方法进行比较。但是,如果你想要自定义对象的比较规则,可以通过实现 Comparator 接口来实现。

接口定义如下

public interface Comparator<T> {
    int compare(T o1, T o2);
    // 省略不相关代码
}
  • x.compareTo(y) : 比较x和y的大小
    • return < 0 : x<y
    • return = 0 : x=y
    • return > 0 : x>y

代码示例

import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

@Data
class Employee {
    private int id;
    private String name;
    private int age;

    public Employee(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

class AgeComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee emp1, Employee emp2) {
        return emp1.getAge() - emp2.getAge();
    }
}

public class Main {
    public static void main(String[] args) {
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee(1, "Tom", 30));
        employees.add(new Employee(2, "Jerry", 25));
        employees.add(new Employee(3, "David", 35));

        // 使用自定义的比较器进行排序
        Collections.sort(employees, new AgeComparator());
        // 或者使用Lambda表达式 不需要实现接口 1
        employees.sort((emp1, emp2) -> emp1.getAge() - emp2.getAge());
        // 或者使用Lambda表达式 不需要实现接口 2
        employees.sort(Comparator.comparingInt(Employee::getAge));

        System.out.println("按年龄排序后的员工列表:");
        for (Employee emp : employees) {
            System.out.println(emp);
        }
    }
}

运行上述代码,将按照员工的年龄对员工列表进行排序。输出结果如下所示:

按年龄排序后的员工列表:
Employee [id=2, name=Jerry, age=25]
Employee [id=1, name=Tom, age=30]
Employee [id=3, name=David, age=35]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值