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

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

在 Java 8 中迭代地圖時使用 ForEach 提取多行 Lambda 表達式

在 Java 8 中迭代地圖時使用 ForEach 提取多行 Lambda 表達式

紅顏莎娜 2023-03-02 10:40:22
我正在使用Java 8迭代如下所示的地圖forEachMap<Integer,String> testMap = new HashMap<>();testMap.put(1, "Atul");testMap.put(2, "Sudeep");testMap.put(3, "Mayur");testMap.put(4, "Suso");testMap.entrySet().forEach( (K)-> {                         System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());                System.out.println("Some more processing ....");                        }    );我的問題是:forEach1)我們?nèi)绾卧谟成渲刑幚頃r提取方法?2)也就是里面的部分代碼forEach應(yīng)該包裹在方法里面:        System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());        System.out.println("Some more processing ....");    3)我理解forEach這種情況下的方法需要一個Consumer具有以下簽名的功能接口 -void accept(T t); 4)所以我想要的是這樣的:   //declare a consumer object    Consumer<Map.Entry<Integer,String>> processMap = null;  // and pass it to ForEach   testMap.entrySet().forEach(processMap);5)我們能做到嗎?
查看完整描述

3 回答

?
紅糖糍粑

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

我理解這種情況下的 forEach 方法需要一個具有以下簽名的消費者功能接口


forEach()確實期望 aConsumer但要處理 aConsumer你不一定需要 a Consumer。您需要的是一種尊重功能接口的輸入/輸出的方法Consumer,即Entry<Integer,String>輸入/void輸出。


因此,您可以只調(diào)用一個方法,該方法的參數(shù)為Entry:


testMap.entrySet().forEach(k-> useEntry(k)));

或者


testMap.entrySet().forEach(this::useEntry));

使用 useEntry() 例如:


private void useEntry(Map.Entry<Integer,String> e)){        

    System.out.println("Key ="+e.getKey()+" Value = "+e.getValue());

    System.out.println("Some more processing ....");                        

}

Consumer<Map.Entry<Integer,String>>聲明您傳遞給的a ,forEach()例如:


Consumer<Map.Entry<Integer,String>> consumer = this::useEntry;

//...used then :

testMap.entrySet().forEach(consumer);

僅當(dāng)您的消費者forEach()被設(shè)計為以某種方式可變(由客戶端計算/傳遞或無論如何)時才有意義。

如果您不是這種情況并且您使用了消費者,那么您最終會使事情變得比實際需要的更加抽象和復(fù)雜。


查看完整回答
反對 回復(fù) 2023-03-02
?
慕工程0101907

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

關(guān)于什么


public void processMap(Map.Entry K){

  System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());

  System.out.println("Some more processing ....");

}

然后像這樣使用它:


testMap.entrySet().forEach((K)-> processMap(K));


查看完整回答
反對 回復(fù) 2023-03-02
?
鳳凰求蠱

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

您可以使用方法參考:


Consumer<Map.Entry<Integer,String>> processMap = SomeClass::someMethod;

該方法定義為:


public class SomeClass {


    public static void someMethod (Map.Entry<Integer,String> entry) {

        System.out.println("Key ="+entry.getKey()+" Value = "+entry.getValue());

        System.out.println("Some more processing ....");

    }


}

如果您愿意,您甚至可以使該方法更通用:


public static <K,V> void someMethod (Map.Entry<K,V> entry) {

    System.out.println("Key ="+entry.getKey()+" Value = "+entry.getValue());

    System.out.println("Some more processing ....");

}


查看完整回答
反對 回復(fù) 2023-03-02
  • 3 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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