java Comparator
时间: 2023-10-13 09:30:36 浏览: 34
Java Comparator是一个函数式接口,用于比较两个对象的大小。它定义了一个compare()方法,该方法接收两个参数,并返回一个整数值。如果第一个参数小于第二个参数,则返回负整数;如果第一个参数等于第二个参数,则返回零;如果第一个参数大于第二个参数,则返回正整数。
Comparator接口常常用于对集合进行排序。通过实现Comparator接口,可以自定义比较规则,使得集合中的元素按照指定的顺序排列。
例如,假设有一个Person类,它有两个属性:name(姓名)和age(年龄)。要对一个列表中的Person对象按照年龄从小到大进行排序,可以使用如下代码:
```java
List<Person> personList = new ArrayList<>();
personList.sort(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
```
在这个例子中,我们使用了匿名内部类的方式来实现Comparator接口,并通过实现compare()方法来定义排序规则。具体而言,我们比较了两个Person对象的年龄大小,并返回它们之间的差值。如果o1的年龄小于o2的年龄,则返回负数,表示o1排在o2的前面;如果o1的年龄等于o2的年龄,则返回零,表示它们的顺序不变;如果o1的年龄大于o2的年龄,则返回正数,表示o1排在o2的后面。
Java Comparator可以使用Lambda表达式来进一步简化代码。例如,上述例子可以改写为:
```java
List<Person> personList = new ArrayList<>();
personList.sort((o1, o2) -> o1.getAge() - o2.getAge());
```
在这个例子中,我们使用Lambda表达式来实现Comparator接口。Lambda表达式中的箭头符号(->)表示“实现”,左侧是方法的参数列表,右侧是方法的实现。在这个例子中,我们使用了o1.getAge() - o2.getAge()来实现比较规则,它等价于上述匿名内部类的实现。