提取Java集合的元素-Java 8方法
我們所有人都廣泛使用了Collection類,例如List,Map及其派生版本。 每次使用它們時(shí),我們都必須遍歷它們以找到某個(gè)元素或更新這些元素,或者找到匹配某個(gè)條件的不同元素。 考慮如下所示的人員列表:
要找出年齡大于30歲的所有Person實(shí)例,我們可以這樣做:
List<Person> olderThan30OldWay = new ArrayList<>(); for ( Person p : personList){if ( p.age >= 30){olderThan30OldWay.add(p);} } System.out.println(olderThan30OldWay);這給了我輸出為:
[Rajesh Mohan, 32, Rahul Dravid, 35]該代碼易于編寫,但是是否更冗長一些,尤其是在迭代部分? 我們?yōu)槭裁匆?#xff1f; 如果有一個(gè)API可以迭代內(nèi)容并給我們最終結(jié)果,即我們給出源List并使用一系列方法調(diào)用來獲得我們正在尋找的結(jié)果List,那不是很酷嗎? 是的,這在其他語言(例如Scala,Groovy)中是可行的,它們支持傳遞閉包,也支持內(nèi)部迭代。 但是Java開發(fā)人員有解決方案嗎? 是的,通過引入對(duì)Lambda Expressions(closures)的支持和增強(qiáng)的Collection API來利用lambda Expression支持,可以解決這個(gè)確切的問題。 令人遺憾的消息是它將成為Java 8的一部分,并且將需要一些時(shí)間才能進(jìn)入主流開發(fā)。
利用Java 8對(duì)上述情況的增強(qiáng)
正如我在增強(qiáng)Collections API以支持Lambda Expression的使用之前所說的那樣,可以在這里閱讀有關(guān)它的更多信息。 JDK團(tuán)隊(duì)沒有將所有新的API添加到Collection類,而是創(chuàng)建了一個(gè)稱為“ Stream”的新概念,并在該類中添加了大多數(shù)API。 “流”是從創(chuàng)建集合的集合中獲取的元素序列。 要了解有關(guān)Stream類起源的更多信息,請(qǐng)參考此文檔 。 為了實(shí)現(xiàn)從使用Java 8中的增強(qiáng)功能開始的示例,我們將使用一些新的API,即:stream(),filter(),collect(),Collectors.toCollection()。
stream() :使用在其上調(diào)用此API的集合來創(chuàng)建Stream類的實(shí)例。
filter() :此方法接受一個(gè)lambda表達(dá)式,該表達(dá)式接受一個(gè)參數(shù)并返回一個(gè)布爾值。 編寫此lambda表達(dá)式可以替代實(shí)現(xiàn)Predicate類。 collect() :此方法有2個(gè)重載版本。 我在這里使用的是一個(gè)Collector實(shí)例。 此方法獲取流的內(nèi)容并構(gòu)造另一個(gè)集合。 此構(gòu)造邏輯由收集器定義。 Collectors.toCollection() : 收藏家是一個(gè)工廠收集 。 并且toCollection()采用Lambda表達(dá)式/方法引用,該引用應(yīng)返回Collection類的任何派生類的新實(shí)例。
簡要介紹所使用的API之后,讓我展示與第一個(gè)代碼示例等效的代碼:
List<Person> olderThan30 = //Create a Stream from the personListpersonList.stream().//filter the element to select only those with age >= 30filter(p -> p.age >= 30).//put those filtered elements into a new List.collect(Collectors.toCollection(() -> new ArrayList<Person>())); System.out.println(olderThan30); 上面的代碼同時(shí)使用了內(nèi)部迭代和lambda表達(dá)式,使其直觀,簡潔且令人耳目一新。 如果您不熟悉Lambda表達(dá)式的概念,請(qǐng)查看我以前的文章 ,其中簡要介紹了Lambda表達(dá)式。
參考:從Javas 合作伙伴 Mohamed Sanaulla的Experiences Unlimited博客中提取Java集合的元素-Java 8方法 。
翻譯自: https://www.javacodegeeks.com/2013/03/extracting-the-elements-of-the-java-collection-the-java-8-way.html
總結(jié)
以上是生活随笔為你收集整理的提取Java集合的元素-Java 8方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TPlink路由器如何设置流量分配如何设
- 下一篇: Java中Comparator和Comp