博客 / 詳情

返回

java8 map新特性

如果使用map計數,當map中不存在這個key時,map.put(key, map.getOrDefault(key, 0) + 1);
可以使用merge,更優雅的實現.代碼如下:

@Test
public void merge() {
    Integer key = 4;
    Map<Integer, Integer> map = new HashMap<>();
    map.put(3, map.getOrDefault(3, 0) + 1);
    map.merge(key, 1, Integer::sum);
    System.out.println(map.get(3));
    System.out.println(map.get(key));

    Map<Integer, String> map1 = new HashMap<>();
    map1.merge(4, "123", String::concat);
    System.out.println(map1.get(key));

    // 待定 如何實現呢? 參考:computeIfAbsent
    Map<Integer, Set<String>> map2 = new HashMap<>();
    // map2.merge(4, "123", Set::add);
    System.out.println(map2.get(key));
}

輸出:
image.png

對於上面代碼中待定的問題,可以參考下列的代碼:

@Test
public void computeIfAbsent() {
    Integer key1 = 4;
    Map<Integer, Set<String>> map = new HashMap<>();
    map.computeIfAbsent(key1, HashSet::new).add("456");

    Integer key = 3;
    Set<String> set = new HashSet<>();
    set.add("123");
    map.put(key, set);
    map.computeIfAbsent(key, HashSet::new).add("123456");
    System.out.println(map);
}

輸出:
image.png
如果有其他更優雅的寫法,歡迎留言交流.

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.