如何使用Lambda表达式实现Comparator接口?代码举例讲解

Lambda 表达式可以用于实现 Java 的 Comparator 接口,来提供定制的比较逻辑。
Comparator 接口的定义如下:

public interface Comparator<T> {
    int compare(T o1, T o2);
}

我们可以像下面这样使用 Lambda 表达式来实现 Comparator:

Comparator<Integer> comparator = (a, b) -> a - b;

这个表达式会简单地返回 a 减去 b,用于比较两个整数。

举个更复杂的例子,我们可以按照人的年龄来排序一个 list:

List<Person> people = Arrays.asList(
    new Person("John", 30), 
    new Person("Amy", 12),
    new Person("Lisa", 56)
);

people.sort((p1, p2) -> p1.getAge() - p2.getAge());

这里我们传入一个 Comparator 表达式 (p1, p2) -> p1.getAge() – p2.getAge(),它会从 Person 对象获取年龄并排序。

再举个字符串排序的例子:

List<String> strings = Arrays.asList("c", "b", "a"); 
strings.sort((a, b) -> a.compareTo(b)); 

这个表达式直接调用 String 的 compareTo 方法来进行排序。

除了简化实现 Comparator 接口外,Lambda 还有其他好处:

  1. 免除创建匿名内部类的麻烦。
  2. 表达式十分简洁,只包含核心逻辑。
  3. 可以捕获表达式外部的变量,通过效果更佳。
  4. 具有更好的可读性。