Java流列表到索引映射

bbK*_*ing 1 java java-stream

如何从字符串列表中获取映射,其中索引是键,字符串是值?

如果我有这样一个清单

List<String> list = List.of("foo","bar","baz","doo");
Run Code Online (Sandbox Code Playgroud)

我想要得到一个Map<Integer,String>喜欢

{0=foo, 1=bar, 2=baz, 3=doo}
Run Code Online (Sandbox Code Playgroud)

当我执行以下操作时出现错误

static Map<Integer,String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size())
            .collect(Collectors.toMap(Function.identity(), i -> list.get(i)));
}
Run Code Online (Sandbox Code Playgroud)

错误

所需类型:int 提供:Object

当我将其转换为 int 或 Integer 时

static Map<Integer,String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size())
            .collect(Collectors.toMap(Function.identity(), i -> list.get((Integer) i)));
}
Run Code Online (Sandbox Code Playgroud)

我明白了

'java.util.stream.IntStream' 中的 'collect(java.util.function.Supplier, java.util.function.ObjIntConsumer, java.util.function.BiConsumer<R,R>)' 无法应用于 '(java .util.stream.Collector<java.lang.Object,capture<?>,java.util.Map<java.lang.Object,java.lang.String>>)'

我缺少什么?

Flo*_*yle 7

IntStream没有collect()采用 aCollector作为参数的方法,因此您必须使用boxed()将其转换为 a Stream<Integer>

static Map<Integer, String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size()).boxed().collect(Collectors.toMap(Function.identity(), list::get));
}
Run Code Online (Sandbox Code Playgroud)