java - Stream collect toMap - 输入不匹配

时间:2018-03-13 05:04:35

标签: java list dictionary stream collectors

我正在尝试将一个集合列表收集到一个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
}

有什么建议吗?

2 个答案:

答案 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)));