MapCompute

Wed, Mar 20, 2019 閱讀時間 1 分鐘

init

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("a", 1);

putIfAbsent

有了就不塞, 沒有就塞 value (不存在就塞)

    map.putIfAbsent("a", 2); // return 1
    System.out.println(map); // {a=1}
    map.putIfAbsent("b", 3); // return null (因不存在會回 null, 但會塞進 map)
    System.out.println(map); // {a=1, b=3}

compute

    map.compute("a", (k, v) -> v + 1); // return 2
    System.out.println(map); // {a=2}
    map.compute("b", (k, v) -> v == null ? 1000 : v + 1); // return 1000
    System.out.println(map); // {a=2, b=1000}

computeIfAbsent

不存在就計算

    map.computeIfAbsent("a", k -> 2); // return 1
    System.out.println(map); // {a=1}
    map.computeIfAbsent("b", k -> 1000); // return 1000
    System.out.println(map); // {a=1, b=1000} 

computeIfPresent

存在就計算

    map.computeIfPresent("a", (k, v) -> v + 1); // return 2
    System.out.println(map); // {a=2}
    map.computeIfPresent("b", (k, v) -> v == null ? 0 : v + 1); // reutrn null
    System.out.println(map); // {a=2}