我正在尝试弄清楚如何重写它以使用流和过滤器来缩小我的标准并在必要时从 map 中删除。
Iterator<Map.Entry<String,Object>> iter = listOfPossibleParams.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String,Object> entry = iter.next();
if(entry.getValue() instanceof String) {
if (StringUtils.isBlank((String) entry.getValue())) {
iter.remove();
}
}
}
我最初是这样想的,但它显然不能作为语法错误:
listOfPossibleParams.entrySet()
.stream()
.filter(p -> p.getValue() instanceof String)
.removeIf(e -> StringUtils.isBlank((String)e.getValue()));
最佳答案
如果您可以就地修改 map ,那么您可以:
listOfPossibleParams.values()
.removeIf(v -> v instanceof String && StringUtils.isBlank((String) v));
如果你想构建一个新的 map ,你可以:
listOfPossibleParams.entrySet()
.stream()
.filter(p -> {
Object v = p.getValue();
return !(v instanceof String) || !StringUtils.isBlank((String) v);
})
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
关于Java 8 Streams - 基于条件的迭代器映射和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890469/