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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Guava中针对集合的 filter和过滤功能

發(fā)布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guava中针对集合的 filter和过滤功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Guava中針對集合的 filter和過濾功能

博客分類:? JAVA相關(guān) 在guava庫中,自帶了過濾器(filter)的功能,可以用來對collection 進行過濾,先看例子:?

?? Java代碼??
  • @Test??
  • public?void?whenFilterWithIterables_thenFiltered()?{??
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Iterable<String>?result?=?Iterables.filter(names,?Predicates.containsPattern("a"));??
  • ???
  • ????assertThat(result,?containsInAnyOrder("Jane",?"Adam"));??
  • }??

  • ? 在這個例子中,給出一個list,過濾出含有字母a的元素?

    此外,可以使用Collections2.filter() 去進行過濾?
    Java代碼??
  • @Test??
  • public?void?whenFilterWithCollections2_thenFiltered()?{??
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<String>?result?=?Collections2.filter(names,?Predicates.containsPattern("a"));??
  • ???????
  • ????assertEquals(2,?result.size());??
  • ????assertThat(result,?containsInAnyOrder("Jane",?"Adam"));??
  • ???
  • ????result.add("anna");??
  • ????assertEquals(5,?names.size());??
  • }??


  • ? 這里注意的是,Collections2.filter中,當(dāng)在上面的result中增加了元素后,會直接影響原來的names這個list的,就是names中的集合元素是5了。?
    ? 再來看下predicates判斷語言,?
    com.google.common.base. Predicate : 根據(jù)輸入值得到 true 或者 false?

    拿Collections2中有2個函數(shù)式編程的接口:filter , transform ,例如 :在Collection<Integer>中過濾大于某數(shù)的內(nèi)容:?


    Java代碼??
  • Collection<Integer>?filterList?=?Collections2.filter(collections??
  • ??
  • ?????,?new?Predicate<Integer>(){??
  • ??
  • ??????????????????@Override??
  • ??
  • ??????????????????public?boolean?apply(Integer?input)?{??
  • ??
  • ????????????????????????if(input?>?4)??
  • ??
  • ??????????????????????????????return?false;??
  • ??
  • ????????????????????????else??
  • ??
  • ??????????????????????????????return?true;??
  • ??
  • ??????????????????}??
  • ??
  • });??



  • 把Lis<Integer>中的Integer類型轉(zhuǎn)換為String , 并添加test作為后綴字符:?

    Java代碼??
  • List<String>?c2?=?Lists.transform(list,?new?Function<Integer?,?String>(){??
  • ??
  • ??????????????????@Override??
  • ??
  • ??????????????????public?String?apply(Integer?input)?{??
  • ??
  • ????????????????????????return?String.valueOf(input)?+?"test";??
  • ??
  • ??????????????????}??????????????
  • ??
  • });??




  • 需要說明的是每次調(diào)用返回都是新的對象,同時操作過程不是線程安全的。?

    ??? 再來點例子:?
    ?? Java代碼??
  • @Test??
  • public?void?whenFilterCollectionWithCustomPredicate_thenFiltered()?{??
  • ????Predicate<String>?predicate?=?new?Predicate<String>()?{??
  • ????????@Override??
  • ????????public?boolean?apply(String?input)?{??
  • ????????????return?input.startsWith("A")?||?input.startsWith("J");??
  • ????????}??
  • ????};??
  • ???
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<String>?result?=?Collections2.filter(names,?predicate);??
  • ???
  • ????assertEquals(3,?result.size());??
  • ????assertThat(result,?containsInAnyOrder("John",?"Jane",?"Adam"));??
  • }??

  • ??? 將多個prdicate進行組合?
    Java代碼??
  • @Test??
  • public?void?whenFilterUsingMultiplePredicates_thenFiltered()?{??
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<String>?result?=?Collections2.filter(names,???
  • ??????Predicates.or(Predicates.containsPattern("J"),???
  • ??????Predicates.not(Predicates.containsPattern("a"))));??
  • ???
  • ????assertEquals(3,?result.size());??
  • ????assertThat(result,?containsInAnyOrder("John",?"Jane",?"Tom"));??
  • }??

  • ???
    ???? 上面的例子中找出包含J字母或不包含a的元素;?
    ???
    再看下如何將集合中的空元素刪除:?
    ?? Java代碼??
  • @Test??
  • public?void?whenRemoveNullFromCollection_thenRemoved()?{??
  • ????List<String>?names?=?Lists.newArrayList("John",?null,?"Jane",?null,?"Adam",?"Tom");??
  • ????Collection<String>?result?=?Collections2.filter(names,?Predicates.notNull());??
  • ???
  • ????assertEquals(4,?result.size());??
  • ????assertThat(result,?containsInAnyOrder("John",?"Jane",?"Adam",?"Tom"));??
  • }??


  • ??? 檢查一個collection中的所有元素是否符合某個條件:?
    ?? Java代碼??
  • @Test??
  • ublic?void?whenCheckingIfAllElementsMatchACondition_thenCorrect()?{??
  • ???List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ??
  • ???boolean?result?=?Iterables.all(names,?Predicates.containsPattern("n|m"));??
  • ???assertTrue(result);??
  • ??
  • ???result?=?Iterables.all(names,?Predicates.containsPattern("a"));??
  • ???assertFalse(result);??


  • ?? 下面看如何把一個list進行轉(zhuǎn)換,?
    Java代碼??
  • @Test??
  • public?void?whenTransformWithIterables_thenTransformed()?{??
  • ????Function<String,?Integer>?function?=?new?Function<String,?Integer>()?{??
  • ????????@Override??
  • ????????public?Integer?apply(String?input)?{??
  • ????????????return?input.length();??
  • ????????}??
  • ????};??
  • ???
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Iterable<Integer>?result?=?Iterables.transform(names,?function);??
  • ???
  • ????assertThat(result,?contains(4,?4,?4,?3));??
  • }??

  • ????
    ? 再看結(jié)合transform和predicates結(jié)合使用的例子:?
    ?? Java代碼??
  • @Test??
  • public?void?whenCreatingAFunctionFromAPredicate_thenCorrect()?{??
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<Boolean>?result?=??
  • ??????Collections2.transform(names,??
  • ??????Functions.forPredicate(Predicates.containsPattern("m")));??
  • ???
  • ????assertEquals(4,?result.size());??
  • ????assertThat(result,?contains(false,?false,?true,?true));??
  • }??


  • ??? 在這個例子中,將一個LIST中的每一個元素進行使用Predicates.containsPattern,判斷是否包含m,返回的是boolean,然后再得到的boolean值一起轉(zhuǎn)換為collection?


    ??? 下面是兩個function一起結(jié)合使用的例子:?

    ? Java代碼??
  • @Test??
  • public?void?whenTransformingUsingComposedFunction_thenTransformed()?{??
  • ????Function<String,Integer>?f1?=?new?Function<String,Integer>(){??
  • ????????@Override??
  • ????????public?Integer?apply(String?input)?{??
  • ????????????return?input.length();??
  • ????????}??
  • ????};??
  • ???
  • ????Function<Integer,Boolean>?f2?=?new?Function<Integer,Boolean>(){??
  • ????????@Override??
  • ????????public?Boolean?apply(Integer?input)?{??
  • ????????????return?input?%?2?==?0;??
  • ????????}??
  • ????};??
  • ???
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<Boolean>?result?=?Collections2.transform(names,?Functions.compose(f2,?f1));??
  • ???
  • ????assertEquals(4,?result.size());??
  • ????assertThat(result,?contains(true,?true,?true,?false));??
  • }??

  • ?? 在這個例子中,首先應(yīng)用函數(shù)f1,求出每個元素的長度,然后再根據(jù)f1函數(shù),分別返回?
    它們的boolean值,再轉(zhuǎn)換為collection.?
    ???
    ?? 最后看下將filter和transform結(jié)合使用的例子:?
    ?? Java代碼??
  • @Test??
  • public?void?whenFilteringAndTransformingCollection_thenCorrect()?{??
  • ????Predicate<String>?predicate?=?new?Predicate<String>()?{??
  • ????????@Override??
  • ????????public?boolean?apply(String?input)?{??
  • ????????????return?input.startsWith("A")?||?input.startsWith("T");??
  • ????????}??
  • ????};??
  • ???
  • ????Function<String,?Integer>?func?=?new?Function<String,Integer>(){??
  • ????????@Override??
  • ????????public?Integer?apply(String?input)?{??
  • ????????????return?input.length();??
  • ????????}??
  • ????};??
  • ???
  • ????List<String>?names?=?Lists.newArrayList("John",?"Jane",?"Adam",?"Tom");??
  • ????Collection<Integer>?result?=?FluentIterable.from(names)??
  • ???????????????????????????????????????????????.filter(predicate)??
  • ???????????????????????????????????????????????.transform(func)??
  • ???????????????????????????????????????????????.toList();??
  • ???
  • ????assertEquals(2,?result.size());??
  • ????assertThat(result,?containsInAnyOrder(4,?3)); ?










  • 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Guava中针对集合的 filter和过滤功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 黄色在线视频观看 | 亚洲区色 | 午夜无遮挡 | 在线不卡一区 | 91最新在线 | 成年人免费网址 | 日本精品免费在线观看 | 中文字幕色网 | 国产女主播喷水视频在线观看 | 午夜性色福利影院 | 国产精品美女久久久久久久久 | 日本中文在线视频 | 污视频在线观看网址 | 麻豆一区二区三区精品视频 | 中国女人做爰视频 | 精品偷拍网 | 色片免费看 | 亚洲热视频 | 久久免费成人 | 成人在线观看视频网站 | 欧美专区第一页 | 欧美成在线 | 大桥未久在线视频 | 免费无码一区二区三区 | 亚洲欧美国产另类 | 黄色的网站在线 | 成人黄色性视频 | 欧美精品大片 | 超碰中文字幕 | 日韩美女毛片 | 激情文学88 | 精品人妻一区二区三区四区不卡 | 亚洲av无码久久忘忧草 | 亚洲图片在线视频 | 久久黄色免费视频 | 久久不射视频 | 国产精品一区二区三区在线免费观看 | 欧美高清在线 | 国产一区二区不卡在线 | 污网站在线播放 | 亚洲先锋影音 | 国产成人精品亚洲精品色欲 | 污片免费在线观看 | 国产欧美一区二区三区沐欲 | 日韩欧美一二三 | 国产男男gay | www国产视频 | 蜜臀久久99精品久久久无需会员 | 久久综合区 | 国产精品免费一区 | 国产精品中文久久久久久 | 国产精品zjzjzj在线观看 | 99ri国产在线| 国产毛片一区 | 日本美女一区二区 | 亚洲欧美伦理 | 91黄在线观看 | 精品99在线 | 可以免费观看的av网站 | 日本视频免费观看 | 欧美 日韩 国产 亚洲 色 | 亚洲天堂手机在线 | 国产一区啪啪 | 色综合99 | 51精品国自产在线 | 三级av片| 成人久久电影 | 日韩有码中文字幕在线观看 | 国产又黄又粗又猛又爽 | 欧美精选一区二区 | 亚洲精选久久久 | 婷婷四月 | 777久久久精品一区二区三区 | 欧美精品久久久久久久 | 狐狸视频污 | 国产毛片在线视频 | 精品免费国产一区二区三区四区 | 中文字幕 欧美 日韩 | 午夜激情综合 | 激情av | 日韩在线精品视频一区二区涩爱 | 浮妇高潮喷白浆视频 | 国产精品日日做人人爱 | 日韩一级在线观看视频 | 国产在线一级 | 国产91一区二区三区在线精品 | 九九这里只有精品视频 | 中文字幕精品亚洲 | 国产精品免费一区二区三区在线观看 | 色婷婷狠| 国产成人免费观看视频 | 国产一区二区三区四区精 | 好吊妞操| www.九色.com | 高清国产视频 | 免费www xxx | 屁屁影院第一页 | 在线看片国产 | 五月天婷婷激情视频 |