我需要实现一种将Collection<String>
转换为LinkedHashMap<String, String>
的方法,
以这种方式,在返回的地图中,每key
等于value
。
例如此列表:
{ "one", "two", "three" }
将转换为该地图:
{ {"one":"one"}, {"two":"two"}, {"three":"three"} }
我目前的解决方案非常简单 - 我正在构建LinkedHashMap
的新实例,
迭代Collection
,并将每个String
放入Map
key
和value
:
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 ,
我想了解新功能,即Stream
和Collectors
。
不幸的是,我遇到了一个令人困惑的问题:
我正在从Stream
获取Collection
,呼叫toMap
收集器,使用相同的元素映射key
和value
,
我的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
?