배열을 값으로 배열 인덱스의 맵으로 변환 [중복]

Dec 13 2020

이 코드에 어떤 문제가 있습니까?

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다음 값으로 a를 생성하고 싶습니다 .

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

그러나 오류는

인터페이스 IntStream의 collect 메소드는 지정된 유형에 적용 할 수 없습니다.

답변

3 Mureinik Dec 13 2020 at 03:28

당신은 ints를 Integers 로 박스해야합니다 :

Map<Integer,Integer> val2Idx =
    IntStream.range(0, nums.length)
             .boxed() // Here!
             .collect(Collectors.toMap(idx -> idx, idx -> nums[idx]));
1 iota Dec 13 2020 at 03:29

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);
AndreMoraes Dec 13 2020 at 03:30

이 오류 idx는 int가 아닌 객체 이기 때문입니다.