这篇文章将为大家详细讲解有关Java8新特性的λ,函数式接口,StreamingAPI,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
λ表达式
1。是对匿名内部类对象的一种格式的简化
2. Java8中引入了一个新的运算符”→“,称为箭头运算符,或者λ运算符
3。作用就是分割前后两部分的
4。左边:表示的是λ表达式的参数列表(接口中,定义的抽象方法的参数)
5。右边:表示的是方法的方法体,λ体
语法格式的书写
1。没有参数,也没有返回值
左面的小括号不能省,右边的大括号可以省略也可以不用省
3。接口中需要重写的方法内容有很多,需要给多句话的加上大括号
注意事项:如果λ体中的语句有只有一句,那么大括号可以省略不写,如果大扩号中只有一条语句,并并且是返回语句,那么返回关键字可以省略不写
<强>函数式接口强>
λ表达式使用的前提,就是接口必须是函数式接口,如果在接口中,只有一个抽象方法,那么这个接口就是函数式接口,常用一个注解来检查当前接口是否是一个函数式接口@FunctionalInterface,如果不是函数式接口,则编译报错
<强>作用:强>
想表达的是一个方法的内容,由于方法不在任何类中,所有被称为函数,接口其实想表达的就一个函数的声明,接下来的使用这个接口的实现类对象,来表达一个函数的体现
<强>消费型接口:强>
抽象方法:空白接受(T T)
当某个函数可以接受一个数据,并且处理这个数据,处理完成之后,就不需要返回任何数据,这个函数需要当做数据来进行传递,就使用消费型接口
包cn.ujiuye.function; 进口java.util.function.Consumer; 进口cn.ujiuye.domin.Mobile;/* * * @author liugang *消费型接口方式 */公开课CustmoerTest { 公共静态void main (String [] args) { 移动m=新的移动(“华为“,3000);//lambad表达式实现赋值内部显然是对消费者接口的使用,故是对函数式接口编程的新东西 updateMobile (m x→x.setPrice (x.getPrice () + 1000)); System.out.println (m); }//调用其使用的方法 私有静态孔隙updateMobile(移动m, Consumercon) { for (int i=0;我& lt;3;我+ +){ con.accept (m); } } }
<>强方法引用强>
1。写一个函数式接口时,方法的实现,已经被某个其他的对象实现了,就不需要在λ中了,再次调用这个实现,而可以那个直接定义好的方法了
2。格式
函数式接口:名称=对象名::方法名称
函数式接口:名称=类名::静态方法名
3。作用
把已经实现的当做一个数据,作为一个引用,赋值给某个函数式接口的引用,可以把这个引用当做方法的返回值,也可以作为一个实现类对象
StreamingAPI
在jdk1.8中,提供了一个流类型,可以很方便的操作容器中的数据,不需要手动定义循环就可以完成对数据的过滤,输出及其其他的操作
流的类型的获取和常用方法
集合的获取:
调用流()方法,调回流对象
终止方法:foreach数
延迟方法:过滤器限制跳过等
包cn.ujiuye.stream; 进口java.util.ArrayList; 进口java.util.Collections; 进口并不知道; 进口java.util.stream.Stream;/* * * @author liugang * */公开课StreamApiDemo03Demo03 { 公共静态void main (String [] args) {//定义一个集合,并获取流类型的数据 List列表=new ArrayList (); 集合。addAll(清单12 32,-13,50100); Stream 流=list.stream (); 流。forEach (x→system . out。println (x - 100)); .count System.out.println (list.stream () ()); } } 包cn.ujiuye.stream; 进口java.util.ArrayList; 进口java.util.Collections; 进口java.util.stream.Stream;/* * * @author liugang *流中一些方法的使用 */公开课StreamApiDemo04 { 公共静态void main (String [] args) { ArrayList Java8新特性的λ,函数式接口,StreamingAPI