第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java 流匹配盡可能多的謂詞

Java 流匹配盡可能多的謂詞

桃花長(zhǎng)相依 2021-07-27 21:12:24
希望根據(jù)定義為 Predicate 的某些條件過(guò)濾列表(以下只是示例):Predicate<Person> agePredicate = p -> p.age < 30;Predicate<Person> dobPredicate = p -> p.dateOfBirth < 1980;Predicate<Person> namePredicate = p -> p.name.startWith("a");List<Predicate<Person>> predicates = Arrays.asList(agePredicate, dobPredicate, namePredicate);List<Person> shortListPersons = listPersArrays.asList(listPersons).stream().filter(p -> predicates.stream().allMatch(f -> f.test(p))).limit(10).collect(Collectors.toList());在我找不到任何人/足夠多的人的情況下,我怎樣才能獲得符合盡可能多條件的人的列表 - 一種排名。我的另一個(gè)選擇是再次調(diào)用與上面相同的函數(shù),但使用 anyMatch 代替,但它不會(huì)很準(zhǔn)確。任何的想法?謝謝!
查看完整描述

2 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

從您的問(wèn)題給出的代碼開(kāi)始:


List<Predicate<Person>> predicates = Arrays.asList(agePredicate, dobPredicate, namePredicate);

我們可以根據(jù)他們匹配的謂詞數(shù)量對(duì)人員列表進(jìn)行排序:


List<Person> sortedListOfPeopleByPredicateMatchCOunt = 

  listPersArrays

    .asList(listPersons)

    .stream()

    .sorted(

      Comparator.comparingLong(p -> predicates.stream().filter(predicate -> predicate.test(p)).count()))

       // Reverse because we want higher numbers to come first.

       .reversed())

    .collect(Collectors.toList());


查看完整回答
反對(duì) 回復(fù) 2021-07-29
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

只是上述答案的擴(kuò)展,如果您的目標(biāo)是過(guò)濾匹配盡可能多條件的集合,您可以創(chuàng)建一個(gè)組合Predicate<Person>,然后將其用于過(guò)濾。


鑒于您的謂詞列表:


List<Predicate<Person>> predicates = Arrays.asList(agePredicate, dobPredicate, namePredicate);

復(fù)合謂詞可以這樣創(chuàng)建:


Predicate<Person> compositPredicate = predicates.stream()

                .reduce(predicate -> false, Predicate::or);

注意:由于歸約操作需要一個(gè)標(biāo)識(shí)值,并且如果任何一個(gè)謂詞結(jié)果為or ,Predicate<>類的操作不會(huì)應(yīng)用任何進(jìn)一步的謂詞true,我已將其用作predicate -> false標(biāo)識(shí)值。


現(xiàn)在,過(guò)濾集合變得更容易和更干凈:


List<Person> shortListPersons = persons.stream()

                                       .filter(compositPredicate)

                                       .collect(Collectors.toList());


查看完整回答
反對(duì) 回復(fù) 2021-07-29
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)