Converta a matriz em um mapa de índice de matriz em valor [duplicado]

Dec 13 2020

O que há de errado com este código?

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

Espero produzir um Mapcom estes valores:

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

Mas o erro é

o método collect na interface IntStream não pode ser aplicado a determinados tipos;

Respostas

3 Mureinik Dec 13 2020 at 03:28

Você precisa encaixotar os ints para 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#collectrequer três argumentos; se quiser usar a versão de 2 argumentos, você deve usar IntStream#boxedpara convertê-la em um 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

Este erro é devido ao fato de idxser um objeto e não um int