JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
這些天看見另一本好書《給大忙人看的Java SE 8》,其中的新特性 StreamAPI 和 lambda表達(dá)式 是之前jdk沒有提供的新特性,也是jdk8 重要的更新內(nèi)容,我會總結(jié)一下它們的用法,更詳細(xì)的參見書本。
人對一個(gè)概念的理解是隨著時(shí)間漸漸加深的,之前也見過lambda表達(dá)式,但那時(shí)候?qū)W起來完全摸不到頭腦,這兩天重新去看,終于有了一些概念,可以想象,過段時(shí)間會更加知道為什么會有l(wèi)ambda表達(dá)式,大牛們?yōu)槭裁磿ピO(shè)計(jì)這種函數(shù)式語言?
java里大家都知道匿名函數(shù),下面是一個(gè)多線程的創(chuàng)建例子:
package JDK;/*** Created by panqian on 2017/2/20.*/ public class Lambda_1 {public static void main(String[] args) {//傳統(tǒng)創(chuàng)建線程new Thread(new Runnable() {@Overridepublic void run() {System.out.println("傳統(tǒng)創(chuàng)建線程");}}).start();//使用lambda表達(dá)式new Thread(()->{System.out.println("lambda表達(dá)式");}).start();} }?
同樣是傳入Runnable實(shí)現(xiàn)類,lambda表達(dá)式的寫法比傳統(tǒng)的更加簡潔。再看一個(gè)集合排序 List<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(2);System.out.println("排序前: " + list.toString());Collections.sort(list, (Integer x, Integer y) -> {return x > y ? 1 : -1;});System.out.println("排序后: " + list.toString());?
可以看出 lambda表達(dá)式由 參數(shù)((Integer x, Integer y)),剪頭(->),代碼塊({ 
 return x > y ? 1 : -1; })組成。 lambda表達(dá)式很大的一個(gè)使用場景就是替代java的內(nèi)部類,做到代碼簡潔,易讀。
2.方法引用 
 對于上面的代碼還不是最簡潔的,如果在lambda表達(dá)式中引用別的方法,可以拿lambda表達(dá)式里面的方法引用:
拿前面集合排序的例子繼續(xù)簡化:
List<Integer> list1 = new ArrayList<>(); list1.add(3); list1.add(1); list1.add(2);System.out.println("排序前: " + list1.toString());//::前面是類,后面是方法,壓縮到只有一句,等同于 // // (Integer x, Integer y) -> { // return Integer.compare(x,y); // } list1.sort(Integer::compare);System.out.println("排序前: " + list1.toString());?
可以看出它由
對象::實(shí)例方法 類::靜態(tài)方法格式組成
Integer::compare這個(gè)表達(dá)式?jīng)]有參數(shù),它會根據(jù)上下文自動判斷應(yīng)該傳入什么參數(shù),達(dá)到排序的目的。
未完待續(xù)
轉(zhuǎn)載于:https://www.cnblogs.com/lovejj1994/p/7182158.html
總結(jié)
以上是生活随笔為你收集整理的JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 用计算机关闭无线网络连接,我的DELL笔
- 下一篇: cad导出pdf_关于PDF文件修改、生
