【问题标题】:Effective way of replacing containsKey check with methods introduced in java8 for Map用 java8 中引入的 Map 方法替换 containsKey 检查的有效方法
【发布时间】:2020-07-13 15:34:56
【问题描述】:

以下是一个使用 Map 计算字符串中字母出现次数的 java 程序:

String str = "babbaceeeeee";
    Map<String,Integer> letterCountMap = new HashMap<>();
    for(int count =0; count<str.length(); count++){
        String letter = str.substring(count, count +1);
        if(letterCountMap.containsKey(letter)){
            int presentCount = letterCountMap.get(letter);
            letterCountMap.put(letter, presentCount + 1);
        }else{
            letterCountMap.put(letter, 1);
        }

        
    }
    System.out.println("letterCountMap ::"+letterCountMap);//prints letterCountMap ::{a=2, b=3, c=1, e=6}

有没有办法在不使用 containsKey() if 条件的情况下使用 Java8 中引入的 Map 方法组合(如 compute()、computeIfPresent()、computeIfAbsent() 等)有效地替换这段代码??

【问题讨论】:

    标签: java java-8 hashmap


    【解决方案1】:

    您可以在Map 上使用Map.merge 来简化它,而不是完整的if..else 块,例如:

    letterCountMap.merge(letter, 1, Integer::sum);
    

    整体解决方案可以简化为:

    Map<Character, Integer> letterCountMap = new HashMap<>();
    for (char letter : str.toCharArray()) {
        letterCountMap.merge(letter, 1, Integer::sum);
    }
    

    【讨论】:

      【解决方案2】:

      从@Naman 的答案中获取提示以使用合并方法,对于那些不熟悉方法参考的人,我提供了一个更清晰的答案:-

      Map<String,Integer> letterCountMap = new HashMap<>();
      for(int count = 0; count<str.length(); count++){
                  String letter = str.substring(count, count +1);
                  System.out.println("Current letter::"+letter);
                  letterCountMap.merge(letter, 1, (a,b)->{
                      //System.out.println("a="+a);//current value of corresponding key
                      //System.out.println("b="+b);//1 in this case
                      return a+b;
                  }
                  );
                   
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2021-12-25
        • 2021-04-25
        • 2013-06-24
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多