java - 流式传输和过滤 SortedMap

标签 java java-stream java-11 sortedmap

我确信这很简单,但由于某种原因我没有得到我想要的。

我有一个SortedMap<String, String>值,我想对其进行流式传输和过滤并仅保存一些值。

例如:

    SortedMap<String, String> input = new TreeMap<>();
    values.put("accepted.animal", "dog");
    values.put("accepted.bird", "owl");
    values.put("accepted.food", "broccoli");
    values.put("rejected.animal", "cat");
    values.put("rejected.bird", "eagle");
    values.put("rejected.food", "meat");

我只想保留键中包含“accepted”的值并删除其他所有内容。

所以,结果将是:

{accepted.animal=dog, accepted.bird=owl, accepted.food=broccoli}

如何流式传输 map 并过滤掉除包含“accepted”的键之外的所有内容?

这是我尝试过的:

private SortedMap<String, String> process(final Input input) {
    final SortedMap<String, String> results = new TreeMap<>();

    return input.getInputParams()
                .entrySet()
                .stream()
                .filter(params -> params.getKey().contains("accepted"))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
} 

但由于“无法从静态上下文引用非静态方法”而失败。

最佳答案

您需要使用 Collectors.toMap 的另一个变体这样您就可以传递合并函数和供应商以将其收集为 TreeMap :

return input.getInputParams()
        .entrySet()
        .stream()
        .filter(params -> params.getKey().startsWith("accepted")) // small change
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (a, b) -> b, TreeMap::new));

关于java - 流式传输和过滤 SortedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58331795/

相关文章:

java - 由于 RaceCondtion,使用流迭代 LinkedList 正在改变结果列表

java - java 9中引入的方法是使用编译器目标java 8编译的

java - 让 javaFX 11 应用程序在 docker 上运行

即使安装了 Java 11,Java Runtime 也只能识别 52.0 以下的类文件版本

java - 我的 Java 编码中的数字和字符串有问题

java - Hadoop序列化和反序列化

java - 如何使用 Hibernate 删除相互关联的对象

java - JSPG0122E : Unable to parse EL function in Websphere 8

lambda - java.util.function.Function 中的状态

java - 为什么不能在方法级别抛出 java 流中的已检查异常?