Java 8 Streams - 基于条件的迭代器映射和删除

标签 java java-8 java-stream

我正在尝试弄清楚如何重写它以使用流和过滤器来缩小我的标准并在必要时从 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/

相关文章:

java - 模拟 Instant.now() 而不使用 Clock 进入构造函数或不使用 Clock 对象

java - JetBrain IntelliJ IDEA 如何选择 Java 启动

java - 如何从 Java 8 lambda/流内部抛出 CHECKED 异常?

java - 无法运行 WordCount-Compiler 问题的 java 示例

javascript - 使用 Jsoup Java 从 Wep Pages 获取数据

java - iText - 使用 PdfCleanUpProcessor 后输出文件字体看起来模糊

java - hibernate :标准。是否可以构建一个限制列表,然后将其添加到 Criteria 对象

Java `Iterator` 到 `Stream`,在终端操作上消耗 `Iterator`

java - 从用户输入获取命令时出现问题

java - 在并行 Java 流中处理随机数