1.putIfAbsent(不存在时执行put)

  • 方法简介

英文翻译:如果不存在(absent),则put
即如果put的key值不存在就进行put,若key已经存在了,就不执行put操作

  • 演示

    1. @Test
    2. public void testPutIfAbsent(){
    3. HashMap<String, Integer> map = new HashMap<>(1);
    4. map.put("lulu",2);
    5. System.out.println("调用putIfAbsent方法前:"+map.get("lulu"));
    6. //由于key ="lulu" 已经有值了,所以value=10 put失败, value仍为 2
    7. Integer lulu = map.putIfAbsent("lulu", 10);
    8. System.out.println("方法返回值:"+lulu);
    9. System.out.println("调用putIfAbsent方法前:"+map.get("lulu"));
    10. }

    2.getOrDefault(没有key获取默认值)

  • 方法简介

如果key值不存在,则返回指定的默认值

  • 演示

    1. @Test
    2. public void testGetOrDefault(){
    3. HashMap<String,Integer> map = new HashMap<>();
    4. Integer lulu = map.getOrDefault("lulu", 10);
    5. System.out.println(lulu);
    6. }

    3.merge(与当前value值合并)

  • 演示

    1. @Test
    2. public void testMerge(){
    3. Map<String,Integer> map= new HashMap<>(16);
    4. map.put("Java",1);
    5. map.merge("Java",10,(nowValue,bindValue)->{
    6. System.out.println("当前key=Java中存放的value值:"+nowValue); // 输出 1
    7. System.out.println("当前key=Java绑定的值,即第二个参数的值"+bindValue); //输出 10
    8. Integer returnValue = nowValue + bindValue;
    9. //如果return null 则等于删除这个key
    10. return returnValue;
    11. });
    12. System.out.println(map.get("Java")); //输出 11
    13. }
  • 方法简介

如上面的例子,如果 没有key=”Java” 的值,那么就 put(”Java”,10);
若存在key=”Java”的值,且value=nowValue,那么就走一个lamda表达式,返回一个值作为最终的”Java”的value。
上面演示中的merge写法就相当于下面这种:

  1. @Test
  2. public void testMerge(){
  3. final Integer bindValue = 10;
  4. Map<String,Integer> map= new HashMap<>(16);
  5. map.put("Java",1);
  6. if(map.containsKey("Java")){
  7. Integer nowValue = map.get("Java");
  8. Integer returnValue = nowValue + bindValue;
  9. map.put("Java",returnValue);
  10. }else {
  11. map.put("Java",bindValue);
  12. }
  13. System.out.println(map.get("Java")); //输出 11
  14. }

4.compute(根据key-value计算新的value)

  • 演示

    1. @Test
    2. public void testComputer(){
    3. Map<String,Integer> map= new HashMap<>(16);
    4. map.put("Java",1);
    5. //返回一个新vlaue
    6. Integer newValue = map.compute("Java", (key, value) -> {
    7. String thisKey = key;
    8. Integer thisValue = value;
    9. //如果这步 return null 则 ==> 删除 key='Java'
    10. return thisKey.length() + thisValue;
    11. });
    12. System.out.println(newValue); //输出 5
    13. System.out.println(map.get("Java")); //输出 5
    14. }
  • 方法简介

这个方法的作用是将 一对key-value值中 的 key 和value值组合,来生成一个新的 value值 。

5.computeIfPresent(存在key时才根据key和vlaue计算新value)

  • 演示

如果使用 computer :

  1. @Test
  2. public void testComputer(){
  3. Map<String,Integer> map= new HashMap<>(16);
  4. Integer newValue = map.compute("Java", (key, value) -> {
  5. String thisKey = key;
  6. //如果这步 return null 则 ==> 删除 key='Java'
  7. return thisKey.length();
  8. });
  9. System.out.println(newValue); //输出 4
  10. System.out.println(map.get("Java")); //输出 4
  11. }

使用computerIfPresent:

  1. @Test
  2. public void testComputer(){
  3. Map<String,Integer> map= new HashMap<>(16);
  4. Integer newValue = map.computeIfPresent("Java", (key, value) -> {
  5. String thisKey = key;
  6. //如果这步 return null 则 ==> 删除 key='Java'
  7. return thisKey.length();
  8. });
  9. System.out.println(newValue); //输出 null
  10. System.out.println(map.get("Java")); //输出 null
  11. }
  • 方法简介

与computer不同在于,如果key不存在,computerIfPresent压根就不走入第二个lamda表达式。

6.computerIfAbsent (不存在key时才根据key计算新value)

  • 演示

    1. @Test
    2. public void testComputerIfAbsent(){
    3. Map<String,Integer> map = new HashMap<>();
    4. map.computeIfAbsent("Java",(key)->key.length());
    5. System.out.println(map.get("Java")); //输出 4
    6. }
  • 方法简介

当key值在map中不存在时,通过提供的lamda表达式计算value,之后执行 将key和value放入map

7.replaceAll(替换所有的key-value)

  • 方法简介

此方法遍历每一对key value,并将value置为所返回的值

  • 演示
    1. @Test
    2. public void testReplaceAll(){
    3. Map<String,Integer> map = new HashMap<>();
    4. map.put("Java",10);
    5. map.put("Hadoop",1);
    6. map.put("Hive",11);
    7. map.put("Spark",100);
    8. //将所有的key的value都置为1
    9. map.replaceAll((key,value)->{
    10. System.out.println("key为:"+key);
    11. System.out.println("value为:"+value);
    12. return 1;
    13. });
    14. //遍历map
    15. map.forEach((key,value)->{
    16. System.out.println(key+"="+value);
    17. });
    18. /**
    19. * Java=1
    20. * Hive=1
    21. * Hadoop=1
    22. * Spark=1
    23. */
    24. }