當前位置:
首頁 >
JAVA8之lambda表达式
發布時間:2024/4/17
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
JAVA8之lambda表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lambda表達式是java8開始支持的一個特性,方便好用,使用lambda表達式進行編程可以明顯提升開發效率,并且在執行效率上也有一定的優化。下面回顧一下lambda表達式的兩部分常見用途。
一、針對函數式接口編程,匿名內部類的實現。
首先用個人語言來描述下函數式編程,就是接口中只含有一個接口方法,然后生成這個接口的實現類時只需要實現這一個接口方案就能構成一個實現類,此時就可以使用lambda表達式來實現這種匿名內部類,他是以一種函數的形式來表達的,前面為一個函數的輸入,然后yige “->”后面接這個函數的方法體,下面以兩個常見的例子來看,最常見的便是創建線程時u,這時我們最常使用匿名內部類的時候,在沒有lambda表達式時,我們是這樣實現的
Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("run ... ");} };Thread thread = new Thread(runnable); thread.start();runnable這個接口中只有一個未實現的方法run,所以我們可以使用lambda表達式來實現它,我們可以將上述代碼簡化為
new Thread(()->System.out.println("run ... ")).start();()是run方法沒有參數,所以以()表示,->以后為run方法的實現,這個就很想函數的形式,所以稱為函數式編程
還有個我們比較常見的例子就是比較器,在沒使用lambda表達式時是如下所示
List<String> list = Arrays.asList("aa", "abc", "abcdf", "v","java"); Collections.sort(list, new Comparator<String>(){// 接口名 @Overridepublic int compare(String s1, String s2){// 方法名if(s1 == null)return -1;if(s2 == null)return 1;return s1.length()-s2.length();} });使用了lambda表達式時這樣
List<String> list = Arrays.asList("aa", "abc", "abcdf", "v","java");Collections.sort(list, (s1, s2) ->{// 省略參數表的類型 if(s1 == null) return -1; if(s2 == null) return 1; return s1.length()-s2.length(); }); Comparator接口只有compare一個接口方法,其中(s1, s2)是compare方法傳入的參數,->以后為compare方法的實現。(s1,s2)沒有參數類型,是因為java編譯器可以通過后面參數的使用位置推斷出參數的類型,故可以省略,當然,我們也可以不省略,寫成(String s1,String s2)
二,流式操作,批量處理集合
在對集合的操作上使用lambda表達式其一是簡化代碼,不用寫太多無用且必須的語句,其二,sream的流式操作默認使用了多線程的形式,可以在在待處理集合數據量大的情況下顯著提升效率。
sream分為中間操作和結束操作兩部分
其中詳情見下表
| 中間操作 | concat() distinct() filter() flatMap() limit() map() peek()? skip() sorted() parallel() sequential() unordered() |
| 結束操作 | allMatch() anyMatch() collect() count() findAny() findFirst()? forEach() forEachOrdered() max() min() noneMatch() reduce() toArray() |
?
其中中間方法是對集合進行操作,而結束操作是將處理完類型的sream的對象轉換為結果的集合或者數值、字符串,流式操作的含義就是進行完一個處理后還可以繼續以流的方式繼續處理,比如先去重,然后排序。下面介紹下常用的幾個方法
distinct,去重 Stream<String> stream= Stream.of("aa", "abc", "abcdf", "v","java");
stream.distinct() .forEach(str -> System.out.println(str)); sort,排序 Stream<String> stream= Stream.of("aa", "abc", "abcdf", "v","java");
stream.sorted((str1, str2) -> str1.length()-str2.length()) .forEach(str -> System.out.println(str));
?
轉載于:https://www.cnblogs.com/Lliuyao/p/9980718.html
總結
以上是生活随笔為你收集整理的JAVA8之lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python偏函数应用举例-路灯指示牌
- 下一篇: Mars的简单使用