我正在尝试将一个集合列表收集到一个Map中,其中键是原始列表中的索引,值是集合。我尝试了以下操作,但是我遇到了类型不匹配错误:Type mismatch: cannot convert from Map<Object,Object> to Map<Integer,Collection<String>>
我的代码:
public Map<Integer, Collection<String>> myFunction(final List<Collection<String>> strs) {
return strs.stream().collect(Collectors.toMap(List::indexOf, v -> v)); // Error here
}
有什么建议吗?
答案 0 :(得分:1)
您遇到编译错误:Cannot make a static reference to the non-static method indexOf(Object) from the type List
。
如果你按照下面的说法更正它,它将编译:
return strs.stream().collect(Collectors.toMap(coll -> strs.indexOf(coll), v -> v));
或者,使用方法参考:
return strs.stream().collect(Collectors.toMap(strs::indexOf, v -> v));
答案 1 :(得分:1)
List<Collection<Integer>> list = ...;
Map<Integer, Collection<Integer>> collect = IntStream.range(0, list.size())
.boxed()
.collect(Collectors.toMap(Function.identity(), v -> list.get(v)));