-2

这段代码有什么问题?

int[] nums = new int[] {8, 3, 4};
Map<Integer,Integer> val2Idx = 
    IntStream.range(0, nums.length)
        .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));

我希望Map用这些值产生一个:

{0=8, 1=3, 2=4}

但错误是

接口 IntStream 中的方法 collect 不能应用于给定类型;

4

3 回答 3

3

您需要将 s 装箱intIntegers:

Map<Integer,Integer> val2Idx =
    IntStream.range(0, nums.length)
             .boxed() // Here!
             .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));
于 2020-12-12T20:28:13.897 回答
1

IntStream#collect需要三个参数;如果要使用 2 参数版本,则必须使用IntStream#boxed将其转换为Stream<Integer>.

int[] nums = new int[] {8, 3, 4};
Map<Integer,Integer> val2Idx = 
    IntStream.range(0, nums.length).boxed()
        .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));
System.out.println(val2Idx);
于 2020-12-12T20:29:52.697 回答
0

这是因为idx它是一个对象而不是一个 int

于 2020-12-12T20:30:22.483 回答