如果HashMap具有值,我该如何返回

时间:2017-07-26 09:55:11

标签: java java-8 hashmap

Map<String, Integer> hm = new HashMap<>();
//assume hm is populated

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

我试图做(x -> x % 2 == 0)之类的事情,但它不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:5)

假设我们有一个谓词:

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();
    

答案 1 :(得分: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);
}

答案 2 :(得分:1)

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

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