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

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

生活随笔

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

编程问答

1.13 Predicate操作Collection集合

發(fā)布時(shí)間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.13 Predicate操作Collection集合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Java 8新增的Predicate操作Collection集合

Java 8 起為 Collection 集合新增了一個(gè) removeIf(Predicate filter) 方法,該方法將會(huì)批量刪除符合 filter 條件的所有元素。該方法需要一個(gè) Predicate 對(duì)象作為參數(shù),Predicate 也是函數(shù)式接口,因此可使用 Lambda 表達(dá)式作為參數(shù)。

如下程序示范了使用 Predicate 來(lái)過(guò)濾集合。

import java.util.Collection; import java.util.HashSet; import java.util.Iterator;public class Test {public static void main(String[] args) {//創(chuàng)建一個(gè)集合Collection objs=new HashSet();objs.add("111111111");objs.add("22222222");objs.add("3333333");objs.add("444444");objs.add("55555");objs.removeIf(ele -> ((String)ele).length()<=6);System.out.println(objs);}}

上面程序中 objs.removeIf(ele -> ((String)ele).length()<=6);調(diào)用了 Collection 集合的 removeIf() 方法批量刪除集合中符合條件的元素,程序傳入一個(gè) Lambda 表達(dá)式作為過(guò)濾條件。所有長(zhǎng)度小于6 的字符串元素都會(huì)被刪除。編譯、運(yùn)行這段代碼,可以看到如下輸出:

[3333333, 111111111, 22222222]

使用 Predicate 可以充分簡(jiǎn)化集合的運(yùn)算,假設(shè) objs 集合,程序有如下三個(gè)統(tǒng)計(jì)需求:

  • 統(tǒng)計(jì)集合中出現(xiàn)“英雄聯(lián)盟”字符串的數(shù)量。
  • 統(tǒng)計(jì)集合中出現(xiàn)“養(yǎng)爹人”字符串的數(shù)量。
  • 統(tǒng)計(jì)集合中出現(xiàn)字符串長(zhǎng)度大于 7 的數(shù)量。

此處只是一個(gè)假設(shè),實(shí)際上還可能有更多的統(tǒng)計(jì)需求。如果采用傳統(tǒng)的編程方式來(lái)完成這些需求,則需要執(zhí)行三次循環(huán),但采用 Predicate 只需要一個(gè)方法即可。下面代碼示范了這種用法。

import java.util.Collection; import java.util.HashSet; import java.util.function.Predicate;public class Test {public static int calAll(Collection books,Predicate p){int total=0;for(Object obj:books){// 使用Predicate的test()方法判斷該對(duì)象是否滿足Predicate指定的條件if(p.test(obj)){total++;}}return total;}public static void main(String[] args) {//創(chuàng)建一個(gè)集合Collection objs=new HashSet();objs.add("英雄聯(lián)盟佐伊");objs.add("英雄聯(lián)盟拉克絲");objs.add("英雄聯(lián)盟萬(wàn)花通靈");objs.add("英雄聯(lián)盟時(shí)光守護(hù)者");objs.add("英雄聯(lián)盟峽谷養(yǎng)爹人");// 統(tǒng)計(jì)集合中出現(xiàn)“英雄聯(lián)盟”字符串的數(shù)量System.out.println(calAll(objs, ele -> ((String) ele).contains("英雄聯(lián)盟")));// 統(tǒng)計(jì)集合中出現(xiàn)“養(yǎng)爹人”字符串的數(shù)量System.out.println(calAll(objs, ele -> ((String)ele).contains("養(yǎng)爹人")));// 統(tǒng)計(jì)集合中出現(xiàn)字符串長(zhǎng)度大于 7 的數(shù)量System.out.println(calAll(objs, ele -> ((String) ele).length() > 7));}}

輸出結(jié)果為:

5 1 3

上面程序先定義了一個(gè) calAll() 方法,它使用 Predicate 判斷每個(gè)集合元素是否符合特定條件,條件將通過(guò) Predicate 參數(shù)動(dòng)態(tài)傳入。程序傳入了 3 個(gè) Lambda 表達(dá)式,其目標(biāo)類型都是 Predicate,這樣 calAll() 方法就只會(huì)統(tǒng)計(jì)滿足 Predicate 條件的圖書。

總結(jié)

以上是生活随笔為你收集整理的1.13 Predicate操作Collection集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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