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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

你还在Java8中使用循环语句吗?

發(fā)布時(shí)間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你还在Java8中使用循环语句吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自? ?你還在Java8中使用循環(huán)語(yǔ)句嗎?

Java 8中的新功能特性改變了游戲規(guī)則。對(duì)Java開發(fā)者來(lái)說(shuō)這是一個(gè)全新的世界,并且是時(shí)候去適應(yīng)它了。

在這篇文章里,我們將會(huì)去了解傳統(tǒng)循環(huán)的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允許我們?nèi)ケ磉_(dá)我們想要完成什么,而不是要怎樣做。這正是循環(huán)的不足之處。要確保循環(huán)的靈活性是需要付出代價(jià)的。return、break 或者 continue都會(huì)顯著地改變循環(huán)的實(shí)際表現(xiàn)。這迫使我們不僅要清楚我們要實(shí)現(xiàn)怎樣的代碼,還要了解循環(huán)是怎樣工作的。

現(xiàn)在我們看看怎樣把這些循環(huán)轉(zhuǎn)換為更簡(jiǎn)潔,可讀性更高的代碼。

?

代碼轉(zhuǎn)換

好吧,講的夠多了,是時(shí)候展示一些例子了!

這次我們要以文章為例子。一篇文章?lián)碛幸粋€(gè)標(biāo)題,一個(gè)作者和幾個(gè)標(biāo)簽。

private?class?Article?{private?final?String?title;private?final?String?author;private?final?List<String>?tags;private?Article(String?title,?String?author,?List<String>?tags)?{this.title?=?title;this.author?=?author;this.tags?=?tags;}public?String?getTitle()?{return?title;}public?String?getAuthor()?{return?author;}public?List<String>?getTags()?{return?tags;} }

每個(gè)例子都會(huì)包含一個(gè)使用傳統(tǒng)循環(huán)的方案和一個(gè)使用Java 8新特性的方案。

在第一個(gè)例子里,我們要在集合中查找包含“Java”標(biāo)簽的第一篇文章。

看一下使用for循環(huán)的解決方案。

public?Article?getFirstJavaArticle()?{for?(Article?article?:?articles)?{if?(article.getTags().contains("Java"))?{return?article;}}return?null; }

現(xiàn)在我們使用Stream API的相關(guān)操作來(lái)解決這個(gè)問(wèn)題。

public?Optional<Article>?getFirstJavaArticle()?{?? return?articles.stream().filter(article?->?article.getTags().contains("Java")).findFirst(); }

是不是很酷?我們首先使用 filter 操作去找到所有包含Java標(biāo)簽的文章,然后使用 findFirst() 操作去獲取第一次出現(xiàn)的文章。因?yàn)镾tream是“延遲計(jì)算”(lazy)的并且filter返回一個(gè)流對(duì)象,所以這個(gè)方法僅在找到第一個(gè)匹配元素時(shí)才會(huì)處理元素。

現(xiàn)在,讓我們獲取所有匹配的元素而不是僅獲取第一個(gè)。

首先使用for循環(huán)方案。

public?List<Article>?getAllJavaArticles()?{List<Article>?result?=?new?ArrayList<>();for?(Article?article?:?articles)?{if?(article.getTags().contains("Java"))?{result.add(article);}}return?result; }

使用Stream操作的方案。

public?List<Article>?getAllJavaArticles()?{??return?articles.stream().filter(article?->?article.getTags().contains("Java")).collect(Collectors.toList());} }

在這個(gè)例子里我們使用 collection 操作在返回流上執(zhí)行少量代碼而不是手動(dòng)聲明一個(gè)集合并顯式地添加匹配的文章到集合里。

到目前為止還不錯(cuò)。是時(shí)候舉一些突出Stream API強(qiáng)大的例子了。

根據(jù)作者來(lái)把所有的文章分組。

照舊,我們使用循環(huán)方案。

public?Map<String,?List<Article>>?groupByAuthor()?{Map<String,?List<Article>>?result?=?new?HashMap<>();for?(Article?article?:?articles)?{if?(result.containsKey(article.getAuthor()))?{result.get(article.getAuthor()).add(article);}?else?{ArrayList<Article>?articles?=?new?ArrayList<>();articles.add(article);result.put(article.getAuthor(),?articles);}}return?result; }

我們能否找到一個(gè)使用流操作的簡(jiǎn)潔方案來(lái)解決這個(gè)問(wèn)題?

public?Map<String,?List<Article>>?groupByAuthor()?{??return?articles.stream().collect(Collectors.groupingBy(Article::getAuthor)); }

很好!使用 groupingBy 操作和 getAuthor 方法,我們得到了更簡(jiǎn)潔、可讀性更高的代碼。

現(xiàn)在,我們查找集合中所有不同的標(biāo)簽。

我們從使用循環(huán)的例子開始。

public?Set<String>?getDistinctTags()?{Set<String>?result?=?new?HashSet<>();for?(Article?article?:?articles)?{result.addAll(article.getTags());}return?result; }

好,我們來(lái)看看如何使用Stream操作來(lái)解決這個(gè)問(wèn)題。

public?Set<String>?getDistinctTags()?{??return?articles.stream().flatMap(article?->?article.getTags().stream()).collect(Collectors.toSet()); }

棒極了!flatmap 幫我把標(biāo)簽列表轉(zhuǎn)為一個(gè)返回流,然后我們使用 collect 創(chuàng)建了一個(gè)集合作為返回值。

以上的就是如何使用可讀性更高的代碼代替循環(huán)的例子。很高興您能夠用心讀完,希望對(duì)您有所幫助。

總結(jié)

以上是生活随笔為你收集整理的你还在Java8中使用循环语句吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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