首先要明白一个道理,即 Lambda 他只是一种表达式语法,他在 Java 中,不是对象,不是对象,不是对象,只是一种语法。除了xxx → ...
这种箭头式的,像类名::方法名
和对象::方法名
这样的方法引用也是 Lambda 表达式,是一种语法,不是对象。
Lambda表达式
是不能直接使用的,需要初始化,而初始化要借助 函数式接口,
Lambda表达式
在初始化之前就是个语法,而在初始化之后,就是一个 函数式接口
的实例对象。
然后再讲一个弯弯绕,Lambda表达式
在被函数式接口初始化后可以成为一个对象. 在 Java 中, 类名::方法名
和 对象::方法名
也都是 Lambda表达式
。因此, 对象::方法名
也能被函数式接口初始化。在 Stream 中,函数式接口
是作为 Stream 中的方法参数来进行使用的,而函数式接口
的实例对象,又是 Lambda 表达式
借助函数式接口的初始化的结果。这样,就可以说明 Stream、函数表达式接口、Lambda 之间的协作关系了。
Stream<String> stream= Stream.of("I", "love", "you", "too");
stream.sorted((str1, str2) -> str1.length()-str2.length())
.forEach(str -> System.out.println(str));
在上面的这个例子中就可以看到,sorted方法中的参数就是一个Lambda表达式
而这个方法的源码是这样定义的Stream<T> sorted(Comparator<? super T> comparator)
。
到目前位置,新特性也算是过了一遍了,看似简单的代码,越简单,背后的规则就越多。其实生活中,各处也都是这样的,就像点外卖一样,点一份外卖,其实背后就是一系列的规则和约束,简单的下单行为,背后是骑手和商家,按照心照不宣的约定来做着一系列我们并没有看见的行为,之后才能拿到我们点的餐。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。