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
不为空并且不包含任何null
s。如果这个假设是正确的,我们可以使用这个:
boolean flag = ! map.values().contains(false);
Run Code Online (Sandbox Code Playgroud)
好的 - 它不使用流......
归档时间: |
|
查看次数: |
448 次 |
最近记录: |