本文共 2436 字,大约阅读时间需要 8 分钟。
简介
Oracle在2014年3月份发布了java8正式版,该版本增加了很多新特性,比如:函数式接口、lambda表达式、集合的流式操作、注解的更新、安全性增强、IO\NIO的改进函数式接口什么是函数式接口这是java8的一个核心概念,(Functional Interfaces).通过在接口中添加一个抽象方法,这些方法可以直接从接口中运行。我们有两种方法去实现一个函数式接口函数式接口的特性
1.函数式接口允许定义静态方法
2.函数式接口允许定义default方法3.函数式接口里允许定义java.lang.Object里的public方法泛型及继承关系
接口可以继承接口,如果一个父接口是一个函数接口,那么子接口也有可能是一个函数式接口,那么它的判断依据是什么呢? 对于接口I, 假定M是接口成员里的所有抽象方法的继承(包括继承于父接口的方法), 除去具有和Object的public的实例方法签名的方法, 那么我们可以依据下面的条件判断一个接口是否是函数式接口, 这样可以更精确的定义函数式接口。 如果存在一个一个方法m, 满足: • m的签名(subsignature)是M中每一个方法签名的子签名(signature) • m的返回值类型是M中的每一个方法的返回值类型的替代类型(return-type-substitutable) 那么I就是一个函数式接口。情况一接口Z继承了X,Y接口的m方法,由于这两个方法的签名相同,返回值也一样,所以Z有唯一的一个抽象方法int m(List arg);,可以作为函数式接口。
情况二方法签名Y.m既满足签名是X.m,并且返回值也满足,所以Z仍然是函数式接口
情况三情况2,我们用list排序来演示效果
方法引用
有时候Lambda表达式的代码只是一个简单的方法调用而已,而遇到另外一种情况我们可以更进一步去简化,我们称之为方法引用;引用静态方法引用对象的实例方法引用某个类型的任意对象的实例方法引用类构造函数代码演示 我们同样针对一个数组进行排序,综合以上所有提到的方法引用类型 第一步第二步
中间操作
该操作会保持 stream 处于中间状态,允许做进一步的操作。它返回的还是的 Stream,允许更多的链式操作。常见的中间操作有: filter():对元素进行过滤; sorted():对元素排序; map():元素的映射; distinct():去除重复元素; subStream():获取子 Stream 等。终止操作该操作必须是流的最后一个操作,一旦被调用,Stream 就到了一个终止状态,该操作之后不能再链式的添加其他操作。常见的终止操作有: forEach():对每个元素做处理; toArray():把元素导出到数组; findFirst():返回第一个匹配的元素; anyMatch():是否有匹配的元素等。788692365阿里P8在此群,可以在这里和他进行java高级、架构方面的经验学习交流。转载于:https://blog.51cto.com/13889303/2160307