Map中的merge,compute相关和getOrDefault,putIfAbsent操作
作者:Vic ,分类:Java 发布于 2020-02-15 20:34:21

Map内相关的Java8函数用法

1. merge( K key, V value , BiFunction remappingFunction);

  • 合并
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","22");
    3. map.merge("abc","33", String::concat);
    4. // 如果abc存在 , 则拼接为 2233
    5. // 如果abc不存在则设置为 33
    6. // 如果第二行改为 map.put("acb",null); 则设置为 33

2. compute( K key, BiFunction remappingFunction);

  • 计算
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","22");
    3. map.compute("abc", (key, oldValue) -> oldValue == null ? "ccc" : "hhh"); // 简单逻辑判断
    4. // 或者可以这样写
    5. map.compute("abc", (key, oldValue) -> check(oldValue));
    6. public static String check(String oldValue){
    7. return "ok";
    8. }

3. computeIfAbsent( K key, Function mappingFunction);

  • Key缺失时则计算
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","22");
    3. map.computeIfAbsent("abc", key -> check(key));
    4. // 如果abc不存在则调用check();
    5. // 如果abc存在则不调用check();
    6. // 如果第二行改为 map.put("abc",null); 则调用check();
    7. public static String check(String key){
    8. return "ok";
    9. }

4. computeIfPresent( K key, BiFunction remappingFunction);

  • Key出现时则计算
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","22");
    3. map.computeIfPresent("5", (key, oldValue) -> check(key,oldValue));
    4. // 如果abc存在则不调用check();
    5. // 如果abc不存在则调用check();
    6. // 如果第二行改为 map.put("abc",null); 则调用check();
    7. public static String check(String key,String oldValue){
    8. return "ok";
    9. }

5. getOrDefault( Object key, V defaultValue)

  • Key存在直接返回 , 不存在返回默认值
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","2");
    3. String value = map.getOrDefault( "abc", "1");
    4. // 如果abc存在value的值 2
    5. // 如果abc不存在则返回给定的defaultValue 1
    6. // 如果第二行改为 map.put("abc",null); 则返回null

6. putIfAbsent( K key, V value)

  • Key缺失时添加 ,存在不添加
    1. Map<String,String > map = new HashMap<>();
    2. map.put("abc","2");
    3. map.putIfAbsent( "abc", "1");
    4. // 如果map里不存在则添加abc值为1
    5. // 如果map里abc存在则不添加
    6. // 如果第二行改为 map.put("abc",null); 则添加abc值为1