網頁

2017/12/27

Java 8 Lambda Map forEach() 用法

Java 8 MapforEach()用法如下。

public class Main {

    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<>();
        map.put("matt", 70);
        map.put("john", 80);
        map.put("gary", 90);

        // 使用for-each loop
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        // 使用Java 8 forEach()
        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String k, Integer v) {
                System.out.println(k + ":" + v);
            }
        });

        // 使用Java 8 forEach() 搭配 Lambda語法
        map.forEach((k, v) -> System.out.println(k + ":" + v));

    }

}

上面範例中每個loop的結果都相同。

在Java 8的Map介面新增了forEach()方法,接收的參數為BiConsumer介面的實作,而BiConsumer是只有一個抽象方法(accept(T t, U u))的Functional Interface,所以可以用Lambda語法改寫。

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


2 則留言:

  1. 不知道lambda的"forEach" or "map" 裡有沒有辦法在做多條陳述式?
    像是Collection.map{ k -> k.setA; k.setB; k.setC ....}

    回覆刪除
  2. 原本的API是無法這樣做。
    此外能舉例想要在forEach()或map()執行多條陳述式的情境嗎?

    回覆刪除