Lambda初学者看起来十分复杂,然而实际上写法都是有套路的。
能够看下他们的套路。
比方Supplier,先来看看源码:
咱们写的时候,能够关注途中标注的几个地位
1.两个T,示意定义的出参类型,所以能够写Lambda表达式后面的局部
Supplier<String> supplier
2.源码中括号()局部,这部分示意lambda表达式须要接管的入参,理论这个Supplier不须要入参,所以能够写后边局部,这部分先Copy那个括号,写上箭头,最初再写Supplier提供的操作,Supplier须要返回一个String,间接把返回的String写在箭头左边就行
() -> "Hello Lambda";
写在一起就是
Supplier<String> supplier = () -> "Hello Supplier";
3.表达式写完了,怎么用呢?代码里不是写了get办法么?来试一试
System.out.println(supplier.get());
4.看看输入什么?
Hello Supplier
再比方Consumer,先来看看源码:
咱们写的时候,能够关注途中标注的几个地位
1.两个T,示意定义的入参类型,所以能够写Lambda表达式后面的局部
Consumer<String> consumer
2.源码中括号(T t)局部,这部分示意lambda表达式须要接管的入参,Consumer须要一个T类型的参数,所以能够写后边局部,这部分先Copy那个括号以及两头内容(T t),咱们改成具体的String,写上箭头,最初再写Consumer解决的操作,Consumer不返回内容,间接把操作(咱们就写个System.out.println)写在箭头左边就行
(String t)->System.out.println(t);
写在一起就是
Consumer<String> consumer = (String t)->System.out.println(t);
3.表达式写完了,怎么用呢?代码里不是写了accept办法么?办法里参数不是(T t)么,咱们改成String来试一试
consumer.accept("Hello Consumer!");
4.看看输入什么?
Hello Consumer
5.不是还有个andThen么?外面参数怎么还是个Consumer?那我再写一个别的Consumer试试?
Consumer<String> consumerAndThen = (String t)->System.out.println("And then "+t);
6.怎么用呢?这个不是Consumer的办法么?那不就是再原来的cosumer间接写个"点"就调用了?再方才的第一个cosumer后边写个"点"试试,而且他返回的也是Cosumer,给他个cosumerNew试试
Consumer<String> consumerNew = consumer.andThen(consumerAndThen);
7.怎么调用,还是accept试试去,看看输入了啥?
consumerNew.accept("Hello Consumer!");//输入,依照先后顺序,如果调整两个程序,//打印的程序就不统一,andThen后面的先执行,后边的接下来执行Hello Consumer!And then Hello Consumer!