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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有過濾條件工作流程的 Java 8 流

帶有過濾條件工作流程的 Java 8 流

慕妹3146593 2021-08-06 10:23:28
在帶有過濾條件的 Java 8 流中,集合中的每個元素都被傳遞給過濾器以檢查條件。在這里,我正在編寫兩種不同的過濾條件并給出不同的工作流程。public static void main(String[] args) {    List<String> asList = Arrays.asList("a", "b", "c", "d", "e", "a", "b", "c");    //line 1    asList.stream().map(s -> s).filter(distinctByKey(String::toString)).forEach(System.out::println);    Predicate<String> strPredicate = (a) -> {        System.out.println("inside strPredicate method--");        return a.startsWith("a");    };    //line 2    asList.stream().filter(strPredicate).forEach(System.out::println);}public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {    System.out.println("inside distinctByKey method...");    Set<Object> seen = ConcurrentHashMap.newKeySet();    return t -> seen.add(keyExtractor.apply(t));}在上面的示例代碼中,語句第 1 行過濾條件只執(zhí)行一次,但第 2 行正在為集合輸出中的每個元素執(zhí)行。我認為該distinctByKey方法會為集合中的每個元素執(zhí)行,但事實并非如此。為什么 ?另外,Set對象引用變量seen是僅執(zhí)行一次?流量如何運作?
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經(jīng)驗 獲得超7個贊

distinctByKey是一個 lambda 工廠方法。它正在返回一個Predictate<T>.


所以當你執(zhí)行時:filter(distinctByKey(String::toString))你實際上是distinctByKey先調(diào)用方法,然后返回一個Predicate. 然后為每個元素執(zhí)行該謂詞。只是工廠函數(shù)只會執(zhí)行一次。


移動System.out.println返回的 lambda 內(nèi)部時,您將獲得所需的打印語句:


public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {

    System.out.println("inside distinctByKey method...");

    Set<Object> seen = ConcurrentHashMap.newKeySet();

    return t -> {

        System.out.println("inside distinctByKey.lambda method... ");

        return seen.add(keyExtractor.apply(t));

    };

}


查看完整回答
反對 回復 2021-08-06
?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

seen拍攝由lambda表達式和緩存的拉姆達里面,一旦你的回報Predicate-在Predicate::test將與被多次調(diào)用同一實例seen


查看完整回答
反對 回復 2021-08-06
  • 2 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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