如何将Lambda表达式转换为方法引用?代码举例讲解

Lambda 表达式可以转换为方法引用,从而使代码更简洁。主要有以下几种情况:

  1. 对象::实例方法名
    用于代替 Lambda 表达式 obj -> obj.methodName()
    例如:
Consumer<String> c = s -> s.toUpperCase(); 

可以转换为:

Consumer<String> c = String::toUpperCase; 
  1. 类::静态方法名
    用于代替 Lambda 表达式 (args) -> ClassName.staticMethodName(args)
    例如:
Function<Integer, Integer> f = (x) -> Math.multiplyExact(x, 2);  

可以转换为:

Function<Integer, Integer> f = Math::multiplyExact;
  1. 类::实例方法名
    用于代替 Lambda 表达式(obj, args) -> obj.instanceMethodName(args)
    例如:
BiPredicate<String, String> bp = (s, t) -> s.equals(t);  

可以转换为:

BiPredicate<String, String> bp = String::equals;
  1. 构造方法引用
    用于代替 Lambda 表达式 (args) -> new ClassName(args)
    例如:
Supplier<String> supplier = () -> new String();  

可以转换为:

Supplier<String> supplier = String::new; 

我们来看一些具体的转换例子:

list.forEach(s -> s.toUpperCase());  

可以转换为:

list.forEach(String::toUpperCase); 

Function<Integer, Integer> f = (x) -> Math.multiplyExact(x, 2);   

可以转换为:

Function<Integer, Integer> f = Math::multiplyExact;

BiPredicate<String, String> bp = (s, t) -> s.equals(t);   

可以转换为:

BiPredicate<String, String> bp = String::equals;