什么是方法引用?有哪些类型的方法引用?代码举例讲解

方法引用是 lambda 表达式的一种简写方式,它可以直接引用现有的方法来代替 lambda 体中的内容。

主要有三种类型的方法引用:

  1. 对象::实例方法名
    例如:
String::length 

等价于

s -> s.length()
  1. 类::静态方法名
    例如:
Math::pow

等价于

(a, b) -> Math.pow(a, b)
  1. 类::实例方法名
    例如:
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表达式写法,使代码更加简洁和优雅。