我有一个
Map<String, Object>
,我称之为 myMap,我想遍历每个键并确保它的值是 String
、int
和 Boolean
类型之一。
我试过这些方法:
myMap.entrySet().forEach(key -> myMap.get(key));
我不知道如何进行实际检查...
您可以用
myMap.values()
检查所有Stream#allMatch
。
boolean pass = myMap.values().stream().allMatch(o -> o instanceof String ||
o instanceof Integer || o instanceof Boolean);
注意,值不可能是
int
类型;它只能是包装类Integer
.
取决于您的需要,但以下代码将过滤掉所有值不是给定类型的条目
private Map<String, Object> getSupportedTypes(final Map<String, Object> source) {
return source.entrySet()
.stream()
.filter(entry -> entry.getValue() instanceof Integer
|| entry.getValue() instanceof String
|| entry.getValue() instanceof Boolean)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
这是另一个解决方案:
List<Class> expectedTypes = List.of(String.class, Integer.class, Boolean.class);
return source.values().stream().allMatch(v -> expectedTypes.contains(v.getClass()));