检查映射的所有值是否为true



我有一个Map<String, Boolean> map = new HashMap<>();
考虑一下其中有五个密钥。

map.put("A", true);
map.put("B", true);
map.put("C", false);
map.put("D", true);
map.put("E", true);

如果上面映射中的所有值都为true,我需要将一个布尔标志设置为true
如果任何值为false,则我需要将布尔标志设置为false

我可以迭代这个地图,并像以前一样进行,但我想知道如何通过在这个地图上进行流式处理,在一行中实现这一点。

您可以使用allMatch

boolean flag = map.values().stream().allMatch(x -> x);

allMatch有一个陷阱。如果集合为空,则allMatch将返回true

所以若你们想将flag设置为true,若map不为空,并且所有值都为true,那个么;

boolean flag = !map.isEmpty() && map.values().stream().allMatch(x -> x);

或如@Holger建议的

boolean flag = !map.containsValue(false)

我有另一个解决方案。它假设map不为空,并且不包含任何nulls。如果这个假设是正确的,我们可以使用这个:

boolean flag = ! map.values().contains(false);

好的,它不使用流。。。

;老办法";。但如果你坚持,你可以复习所有的Map#values并使用Stream#allMatch

boolean allTrue = map.values().stream().allMatch(v -> v);

boolean result = !map.values().stream().anyMatch(Boolean.FALSE::equals);即可。

只是给出另一个解决方案:

boolean result = map.values().stream().reduce(true, Boolean::logicalAnd);

相关内容

最新更新