先看一张图直观的了解一下lambda表达式
Lambda表达式的语法:
([Lambda参数列表,即形参列表]) -> {Lambda体,即方法体}
使用 "->"将参数和实现逻辑分离;( ) 中的部分是需要传入Lambda体中的参数;{ } 中部分,接收来自 ( ) 中的参数,完成一定的功能。
赋值:
lambda表达式的结果赋值的时候,可以赋给谁?只能赋给函数式接口
@FunctionalInterface
interface result = map.forEach((k,v) -> System.out.print(k + ":" + v + "\t\t"));
函数式接口能够接受匿名内部类的实例化对象,换句话说,我们可以使用匿名内部类来实例化函数式接口的对象,而Lambda表达式能够代替内部类实现代码的进一步简化,因此,Lambda表达式和函数式接口紧密的联系到了一起,接下来的这句话非常的重要:
每一个Lambda表达式能隐式的给函数式接口赋值
类名::实例方法
对象::实例方法
类名::静态方法
//TreeSet<String> set = new TreeSet<>((s1,s2) -> s1.compareTo(s2));
//类名::实例方法
TreeSet<String> set = new TreeSet<>(String::compareTo);
set.add("Hello");
set.add("isea_you");
// set.forEach(t -> System.out.println(t));//Hello \n isea_you
//(1)对象::实例方法,Lambda表达式的(形参列表)与实例方法的(实参列表)类型,个数是对应
set.forEach(System.out::println);
//Stream<Double> stream = Stream.generate(() -> Math.random()
// 类名::静态方法, Lambda表达式的(形参列表)与实例方法的(实参列表)类型,个数是对应
Stream<Double> stream = Stream.generate(Math::random);
stream.forEach(System.out::println);
参考:https://www.zhihu.com/question/20125256
https://zhuanlan.zhihu.com/p/365505945