如何用Stream一行代码判断Map中指定键对应值是否全为null
用Stream一行代码判断指定键集合对应的值是否全为null
现有如下Map:
Map<String, String> myMap = new HashMap<>(); myMap.put("a", "Something"); myMap.put("b", null); myMap.put("c", "more");
以及List:
List<String> myList = Arrays.asList("a","b");
需求:判断myMap中所有属于myList的键对应的值是否全为null。
原实现方法:
myMap.values().removeIf(Objects::isNull); Map<String, String> resultMap = myList.stream().filter(myMap::containsKey).collect(Collectors.toMap(Function.identity(), myMap::get)); if(!resultMap.isEmpty()){ // 存在至少一个属于myList的键,其对应的值不为null }
一行Stream实现方案
直接利用Stream.allMatch()完成判断,一行代码即可:
boolean allValuesNull = myList.stream().filter(myMap::containsKey).allMatch(key -> Objects.isNull(myMap.get(key)));
逻辑说明
filter(myMap::containsKey):过滤掉myList中不在myMap内的键,避免因get()返回null干扰判断结果allMatch(...):检查所有剩余键对应的myMap值是否全为null- 所有符合条件的键对应值都是null时,返回
true - 只要有一个值不为null,返回
false
- 所有符合条件的键对应值都是null时,返回
如果需要判断是否存在至少一个不为null的值,可改用anyMatch():
boolean hasNonNullValue = myList.stream().filter(myMap::containsKey).anyMatch(key -> Objects.nonNull(myMap.get(key)));
内容的提问来源于stack exchange,提问作者User_1940878
相关产品推荐
相关产品推荐

