首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流和过滤SortedMap

流和过滤SortedMap
EN

Stack Overflow用户
提问于 2019-10-10 22:15:45
回答 2查看 952关注 0票数 2

我相信这是直截了当的,但出于某种原因,我没有得到我想要的。

我有一个SortedMap<String, String>值,我想通过它进行流和过滤,只保存一些值。

例如:

代码语言:javascript
复制
    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");

我只想将包含“接受”的值保留在键中,并删除其他所有内容。

因此,结果将是:

代码语言:javascript
复制
{accepted.animal=dog, accepted.bird=owl, accepted.food=broccoli}

除了包含“接受”的键外,我如何在地图中流动并过滤掉所有内容?

这就是我试过的:

代码语言:javascript
复制
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));
} 

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-11 02:41:27

您需要使用Collectors.toMap的另一个变体,以便将合并函数和供应商作为TreeMap进行收集:

代码语言:javascript
复制
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));
票数 2
EN

Stack Overflow用户

发布于 2019-10-10 23:07:19

最终,该方法不编译,因为Collectors.toMap()返回Map,而方法签名需要返回类型的SortedMap

我不知道误导“静态上下文”错误消息背后的原因;但是当我尝试用Gradle构建代码时,我得到了一条稍微有帮助的消息。

error: incompatible types: inference variable R has incompatible bounds .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); ^ equality constraints: Map<K,U> lower bounds: SortedMap<String,String>,Object

您可能需要接受Collectors.toMap()的重载版本的Supplier<Map>,以便为输出提供一个SortedMap

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58331795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档