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