检查地图的所有值是否为真

Ana*_*shi 0 java hashmap java-8 java-stream

我有一个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);
Run Code Online (Sandbox Code Playgroud)

如果上面地图中的所有值都为真,我需要将一个布尔标志设置为真。
如果任何值是假那么我需要将布尔标志设置为假

我可以迭代这张地图并像旧的方式一样做,但我想知道如何通过在这张地图上流式传输在一行中做到这一点。

Pra*_*een 10

您可以使用 allMatch

boolean flag = map.values().stream().allMatch(x -> x);
Run Code Online (Sandbox Code Playgroud)

有一个问题allMatch。如果集合为空,则allMatch返回true

因此,如果您想在 map 不为空且所有值都为 true 时将 flag 设置为 true ;

boolean flag = !map.isEmpty() && map.values().stream().allMatch(x -> x);
Run Code Online (Sandbox Code Playgroud)

或者像@Holger 建议的那样

boolean flag = !map.containsValue(false)
Run Code Online (Sandbox Code Playgroud)

  • 或者只是 `!map.containsValue(false)`。 (4认同)

Die*_*ann 6

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

boolean flag = ! map.values().contains(false);
Run Code Online (Sandbox Code Playgroud)

好的 - 它不使用流......

  • 甚至更简单:`!map.containsValue(false)`。 (7认同)