3ya*_*uya 1 java dictionary java-stream
我有一个Map<String, ? extends Collection<SomeClass>>.我想确保没有条目集合的大小为0.所以我试过myMap.values().stream().map(Collection::size).allMatch(size -> size > 0).但是,事实证明,myMap包含空条目.
我想检查我的地图是否包含空条目:resourceMap.values().stream().noneMatch(null)但我得到了一个例外java.util.Objects.requireNonNull.
我决定以一种相对老式的方式来做这个for-in循环for (Map.Entry<String, ? extends Collection> entry : myMap)但是,我收到一个编译错误,告诉我foreach不适用于我的Map.
检查地图中的所有条目是否为空且大小> 0的优雅方法是什么?
您只需null使用myMap.values().contains(null)-no Stream API 检查s即可.
如果您的地图是一贯使用List或者Set,你也可以检查空值myMap.values().contains(Collections.emptySet())或myMap.values().contains(Collections.emptyList()),但由于是任意的集合之间没有普遍平等的合同,这并不为你工作Map<String, ? extends Collection<SomeClass>>.
所以对于这个特定的测试,你可以使用
boolean violations = myMap.values().contains(null)
|| myMap.values().stream().anyMatch(Collection::isEmpty);
Run Code Online (Sandbox Code Playgroud)
要么
boolean violations = myMap.values().stream().anyMatch(col -> col==null || col.isEmpty());
Run Code Online (Sandbox Code Playgroud)
当您想要循环迭代时for,您必须指定一个Collection视图Map,例如
Map<String, ? extends Collection<SomeClass>> myMap;
…
for (Map.Entry<String, ? extends Collection<?>> entry: myMap.entrySet())
// loop body
Run Code Online (Sandbox Code Playgroud)
或者,对于这个用例更好
for(Collection<?> value: myMap.values())
if(value == null || value.isEmpty())
// violation detected, perform your action
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |