【问题标题】:How do I return if HashMap has even as value如果 HashMap 的值相等,我该如何返回
【发布时间】:2017-07-26 09:55:11
【问题描述】:
Map<String, Integer> hm = new HashMap<>();
//assume hm is populated

if(hm.containValue(***){ ... }
// *** = contains even number

我尝试做类似(x -&gt; x % 2 == 0) 的操作,但它不起作用。

有什么建议吗?

【问题讨论】:

    标签: java java-8 hashmap


    【解决方案1】:

    假设我们有一个谓词:

    Predicate<Integer> isEvenNumber = x -> x % 2 == 0;
    

    检查 map 的值是否为偶数:

    boolean containsEvenNumber = map.values().stream().anyMatch(isEvenNumber);
    

    计算所有偶数:

    long countEvenNumbers = map.values().stream().filter(isEvenNumber).count();
    

    得到所有偶数

    • 有一个列表:

      List<Integer> evenNumbers = map.values().stream().filter(isEvenNumber).collect(Collectors.toList());
      
    • 使用数组:

      int[] evenNumbers = map.values().stream().filter(isEvenNumber).mapToInt(Integer::intValue).toArray();
      

    【讨论】:

    • 如果我有多个偶数,我想返回?
    • "如果我有多个偶数,我想返回?" => hm.values().stream().filter(x-&gt;x%2==0).count() &gt; 1 我想是的 J
    • @AndrewTobilko 啊,我只是回答 PO 的问题:D
    【解决方案2】:

    如果在地图的值中找到任何偶数,则以下代码为您提供布尔值 true,否则为 false。

    public static void main(String[] args) {
        // Initialize Map         
        Map<String, Integer> hm = new HashMap<String , Integer>(){{
            put("A", 1);
            put("B", 3);
            put("C", 4);
            put("D", 7);
        }};
    
        boolean foundEven = hm.values()
                .stream()
                .anyMatch(i -> i % 2 == 0);
    
        System.out.println(foundEven);
    }
    

    【讨论】:

      【解决方案3】:

      我认为您应该手动循环检查每个值:

      for (int i : hm.values()) {
          if( i % 2 == 0) {
              //do what you want here
          }
      }
      

      【讨论】:

      • @AndrewTobilko,好的,我明白了。我只是想向 PO 展示如何得到他想要的东西。 ANW,谢谢。
      猜你喜欢
      • 2021-07-24
      • 2020-06-20
      • 2021-05-16
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多