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

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

生活随笔

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

编程问答

java chain_java 8中 predicate chain的使用

發(fā)布時(shí)間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java chain_java 8中 predicate chain的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java 8中 predicate chain的使用

簡(jiǎn)介

Predicate是一個(gè)FunctionalInterface,代表的方法需要輸入一個(gè)參數(shù),返回boolean類型。通常用在stream的filter中,表示是否滿足過(guò)濾條件。

boolean test(T t);

基本使用

我們先看下在stream的filter中怎么使用Predicate:

@Test

public void basicUsage(){

List stringList=Stream.of("a","b","c","d").filter(s -> s.startsWith("a")).collect(Collectors.toList());

log.info("{}",stringList);

}

上面的例子很基礎(chǔ)了,這里就不多講了。

使用多個(gè)Filter

如果我們有多個(gè)Predicate條件,則可以使用多個(gè)filter來(lái)進(jìn)行過(guò)濾:

public void multipleFilters(){

List stringList=Stream.of("a","ab","aac","ad").filter(s -> s.startsWith("a"))

.filter(s -> s.length()>1)

.collect(Collectors.toList());

log.info("{}",stringList);

}

上面的例子中,我們又添加了一個(gè)filter,在filter又添加了一個(gè)Predicate。

使用復(fù)合Predicate

Predicate的定義是輸入一個(gè)參數(shù),返回boolean值,那么如果有多個(gè)測(cè)試條件,我們可以將其合并成一個(gè)test方法:

@Test

public void complexPredicate(){

List stringList=Stream.of("a","ab","aac","ad")

.filter(s -> s.startsWith("a") && s.length()>1)

.collect(Collectors.toList());

log.info("{}",stringList);

}

上面的例子中,我們把s.startsWith("a") && s.length()>1 作為test的實(shí)現(xiàn)。

組合Predicate

Predicate雖然是一個(gè)interface,但是它有幾個(gè)默認(rèn)的方法可以用來(lái)實(shí)現(xiàn)Predicate之間的組合操作。

比如:Predicate.and(), Predicate.or(), 和 Predicate.negate()。

下面看下他們的例子:

@Test

public void combiningPredicate(){

Predicate predicate1 = s -> s.startsWith("a");

Predicate predicate2 = s -> s.length() > 1;

List stringList1 = Stream.of("a","ab","aac","ad")

.filter(predicate1.and(predicate2))

.collect(Collectors.toList());

log.info("{}",stringList1);

List stringList2 = Stream.of("a","ab","aac","ad")

.filter(predicate1.or(predicate2))

.collect(Collectors.toList());

log.info("{}",stringList2);

List stringList3 = Stream.of("a","ab","aac","ad")

.filter(predicate1.or(predicate2.negate()))

.collect(Collectors.toList());

log.info("{}",stringList3);

}

實(shí)際上,我們并不需要顯示的assign一個(gè)predicate,只要是滿足

predicate接口的lambda表達(dá)式都可以看做是一個(gè)predicate。同樣可以調(diào)用and,or和negate操作:

List stringList4 = Stream.of("a","ab","aac","ad")

.filter(((Predicate)a -> a.startsWith("a"))

.and(a -> a.length() > 1))

.collect(Collectors.toList());

log.info("{}",stringList4);

Predicate的集合操作

如果我們有一個(gè)Predicate集合,我們可以使用reduce方法來(lái)對(duì)其進(jìn)行合并運(yùn)算:

@Test

public void combiningPredicateCollection(){

List> allPredicates = new ArrayList<>();

allPredicates.add(a -> a.startsWith("a"));

allPredicates.add(a -> a.length() > 1);

List stringList = Stream.of("a","ab","aac","ad")

.filter(allPredicates.stream().reduce(x->true, Predicate::and))

.collect(Collectors.toList());

log.info("{}",stringList);

}

上面的例子中,我們調(diào)用reduce方法,對(duì)集合中的Predicate進(jìn)行了and操作。

總結(jié)

本文介紹了多種Predicate的操作,希望大家在實(shí)際工作中靈活應(yīng)用。

歡迎關(guān)注我的公眾號(hào):程序那些事,更多精彩等著您!

更多內(nèi)容請(qǐng)?jiān)L問(wèn) www.flydean.com

總結(jié)

以上是生活随笔為你收集整理的java chain_java 8中 predicate chain的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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