Map<String, Integer> hm = new HashMap<>();
//assume hm is populated
if(hm.containValue(***){ ... }
// *** = contains even number
我试图做(x -> x % 2 == 0)
之类的事情,但它不起作用。
有什么建议吗?
答案 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
}
}