使用Streams API将Collection转换为LinkedHashMap,获得“循环推理”错误

时间:2016-09-20 15:29:01

标签: java intellij-idea java-8 java-stream collectors

我需要实现一种将Collection<String>转换为LinkedHashMap<String, String>的方法, 以这种方式,在返回的地图中,每key等于value

例如此列表:

{ "one", "two", "three" }

将转换为该地图:

{ {"one":"one"}, {"two":"two"}, {"three":"three"} }

我目前的解决方案非常简单 - 我正在构建LinkedHashMap的新实例, 迭代Collection,并将每个String放入Map keyvalue

public LinkedHashMap<String, String> collectionToMapJava7(Collection<String> collection) {
    LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
    for (String s : collection) {
        linkedHashMap.put(s, s);
    }
    return linkedHashMap;
}

该解决方案运行良好,但由于我的项目已经在使用 Java 8 , 我想了解新功能,即StreamCollectors

不幸的是,我遇到了一个令人困惑的问题:

我正在从Stream获取Collection,呼叫toMap收集器,使用相同的元素映射keyvalue, 我的IDE(IntelliJ IDEA 15.0.4)在标记的行上吐出模糊的“循环推理”错误:

public LinkedHashMap<String, String> collectionToMapJava8(Collection<String> collection) {
    return collection.stream().collect(Collectors.toMap(s->s, s->s));
}                                                       ̃ ̃ ̃ ̃   ̃ ̃ ̃ ̃

据我所知,在阅读了有关此错误的几个问题之后,通常会在您遇到此问题时发生 use a Collector with wrong resulting type,但我不能降低类型约束并使用简单的Map接口。

我的问题是:如何使用Java Streams API将Collection转换为LinkedHashMap

0 个答案:

没有答案