方法引用是 lambda 表达式的一种简写方式,它可以直接引用现有的方法来代替 lambda 体中的内容。
主要有三种类型的方法引用:
- 对象::实例方法名
例如:
String::length
等价于
s -> s.length()
- 类::静态方法名
例如:
Math::pow
等价于
(a, b) -> Math.pow(a, b)
- 类::实例方法名
例如:
String::compareToIgnoreCase
等价于
(a, b) -> a.compareToIgnoreCase(b)
我们来看一些具体例子:
对象::实例方法名
List<String> names = Arrays.asList("a", "b", "c");
names.sort(String::compareTo); // 按字母顺序排序
这里直接使用 String::compareTo 来代替实现 Comparator 接口的 lambda 表达式。
类::静态方法名
List<Integer> nums = Arrays.asList(1, 2, 3);
nums.forEach(Math::pow); // 1, 4, 9
这里 Math::pow 代替了 (n) -> Math.pow(n, 2)。
类::实例方法名
List<String> names = Arrays.asList("a", "b", "c");
names.removeIf(String::isEmpty); // 删除空字符串
这里 String::isEmpty 代替了 s -> s.isEmpty()。
总之,方法引用为我们提供了一种更简洁的lambda表达式写法,使代码更加简洁和优雅。