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 还有其他好处:
- 免除创建匿名内部类的麻烦。
- 表达式十分简洁,只包含核心逻辑。
- 可以捕获表达式外部的变量,通过效果更佳。
- 具有更好的可读性。