Lambda表达式和Java中的方法引用之间的区别?

Lambda表达式是一种匿名方法(无名称的方法),用于提供由 功能接口定义的方法的内联 实现 ,而 方法引用类似于引用 Lambda表达式的方法,该Lambda表达式引用了未执行的方法。箭头(->)运算符可用于在lambda表达式中连接参数和功能,而(::)运算符可将方法名称与方法引用中对象或类的名称分隔开。

Lambda表达式的语法

([comma seperated argument-list]) -> {body}

方法引用的语法

<classname> :: <methodname>

示例

import java.util.*;

public class LambdaMethodReferenceTest {
   public static void main(String args[]) {
      List<String> myList = Arrays.asList("INDIA", "AUSTRALIA", "ENGLAND", "NEWZEALAND", "SCOTLAND");
      System.out.println("------- Lambda Expression --------");

      //使用Lambda函数调用system.out.println()
      myList.stream().map(s -> s.toUpperCase())
                     .forEach(s -> System.out.println(s));

      System.out.println("------- Method Reference ---------");

      //使用方法引用来调用system.out.println()
      myList.stream().map(String :: toUpperCase).sorted()
                     .forEach(System.out :: println);
   }
}

输出结果

------- Lambda Expression --------
INDIA
AUSTRALIA
ENGLAND
NEWZEALAND
SCOTLAND
------- Method Reference --------
AUSTRALIA
ENGLAND
INDIA
NEWZEALAND
SCOTLAND