日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAVA8之lambda表达式

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA8之lambda表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  lambda表達(dá)式是java8開(kāi)始支持的一個(gè)特性,方便好用,使用lambda表達(dá)式進(jìn)行編程可以明顯提升開(kāi)發(fā)效率,并且在執(zhí)行效率上也有一定的優(yōu)化。下面回顧一下lambda表達(dá)式的兩部分常見(jiàn)用途。

  一、針對(duì)函數(shù)式接口編程,匿名內(nèi)部類(lèi)的實(shí)現(xiàn)。

  首先用個(gè)人語(yǔ)言來(lái)描述下函數(shù)式編程,就是接口中只含有一個(gè)接口方法,然后生成這個(gè)接口的實(shí)現(xiàn)類(lèi)時(shí)只需要實(shí)現(xiàn)這一個(gè)接口方案就能構(gòu)成一個(gè)實(shí)現(xiàn)類(lèi),此時(shí)就可以使用lambda表達(dá)式來(lái)實(shí)現(xiàn)這種匿名內(nèi)部類(lèi),他是以一種函數(shù)的形式來(lái)表達(dá)的,前面為一個(gè)函數(shù)的輸入,然后yige “->”后面接這個(gè)函數(shù)的方法體,下面以?xún)蓚€(gè)常見(jiàn)的例子來(lái)看,最常見(jiàn)的便是創(chuàng)建線程時(shí)u,這時(shí)我們最常使用匿名內(nèi)部類(lèi)的時(shí)候,在沒(méi)有l(wèi)ambda表達(dá)式時(shí),我們是這樣實(shí)現(xiàn)的

Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("run ... ");} };Thread thread = new Thread(runnable); thread.start();

runnable這個(gè)接口中只有一個(gè)未實(shí)現(xiàn)的方法run,所以我們可以使用lambda表達(dá)式來(lái)實(shí)現(xiàn)它,我們可以將上述代碼簡(jiǎn)化為

new Thread(()->System.out.println("run ... ")).start();

()是run方法沒(méi)有參數(shù),所以以()表示,->以后為run方法的實(shí)現(xiàn),這個(gè)就很想函數(shù)的形式,所以稱(chēng)為函數(shù)式編程

還有個(gè)我們比較常見(jiàn)的例子就是比較器,在沒(méi)使用lambda表達(dá)式時(shí)是如下所示

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表達(dá)式時(shí)這樣

List<String> list = Arrays.asList("aa", "abc", "abcdf", "v","java");
Collections.sort(list, (s1, s2) ->{// 省略參數(shù)表的類(lèi)型 if(s1 == null) return -1; if(s2 == null) return 1; return s1.length()-s2.length(); }); Comparator接口只有compare一個(gè)接口方法,其中(s1, s2)是compare方法傳入的參數(shù),->以后為compare方法的實(shí)現(xiàn)。(s1,s2)沒(méi)有參數(shù)類(lèi)型,是因?yàn)閖ava編譯器可以通過(guò)后面參數(shù)的使用位置推斷出參數(shù)的類(lèi)型,故可以省略,當(dāng)然,我們也可以不省略,寫(xiě)成(String s1,String s2)
二,流式操作,批量處理集合
在對(duì)集合的操作上使用lambda表達(dá)式其一是簡(jiǎn)化代碼,不用寫(xiě)太多無(wú)用且必須的語(yǔ)句,其二,sream的流式操作默認(rèn)使用了多線程的形式,可以在在待處理集合數(shù)據(jù)量大的情況下顯著提升效率。
sream分為中間操作和結(jié)束操作兩部分
其中詳情見(jiàn)下表 操作類(lèi)型接口方法
中間操作concat() distinct() filter() flatMap() limit() map() peek()?
skip() sorted() parallel() sequential() unordered()
結(jié)束操作allMatch() anyMatch() collect() count() findAny() findFirst()?
forEach() forEachOrdered() max() min() noneMatch() reduce() toArray()

?

其中中間方法是對(duì)集合進(jìn)行操作,而結(jié)束操作是將處理完類(lèi)型的sream的對(duì)象轉(zhuǎn)換為結(jié)果的集合或者數(shù)值、字符串,流式操作的含義就是進(jìn)行完一個(gè)處理后還可以繼續(xù)以流的方式繼續(xù)處理,比如先去重,然后排序。
下面介紹下常用的幾個(gè)方法
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));

?

轉(zhuǎn)載于:https://www.cnblogs.com/Lliuyao/p/9980718.html

總結(jié)

以上是生活随笔為你收集整理的JAVA8之lambda表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。