Как преобразовать одномерный массив целых чисел в карту, используя потоки - PullRequest
0 голосов
/ 05 октября 2018

У меня есть массив целых чисел, и я хочу преобразовать его в карту.Я попытался использовать приведенный ниже код.

Но когда я пытаюсь использовать Collectors.toMap() в следующем формате, он не позволяет отобразить массив.

Код 1: Работает

int arr1[] = {-5, 15, 25, 71, 63};
Map<Integer, Integer> hm = new HashMap<Integer, Integer>();
IntStream.range(0, arr1.length).forEach(i -> hm.put(i, arr1[i]));
System.out.println(hm);     

Код 2: НЕ работает

Map<Integer, Integer> hm1=IntStream.range(0, arr1.length).collect(Collectors.toMap(i->i,i->arr1[i]));

Может кто-нибудь объяснить, как преобразовать массив в карту с помощью функции Collectors.toMap()?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вам нужно указать IntStream, потому что он передает примитивные целые числа, и это вызывает ошибку компиляции.Попробуйте с boxed() потоком вот так;

Map<Integer, Integer> result = IntStream.range(0, arr1.length).boxed().collect(Collectors.toMap(i -> i, i -> arr1[i]));
0 голосов
/ 05 октября 2018

Я думаю, что проблема в том, что IntStream генерирует поток примитивных целых.Попробуйте запаковать поток прежде, чем он попадет в коллектор:

hm = IntStream.range(0, arr1.length).boxed().collect(Collectors.toMap(i->i,i->arr1[i]));
for (Map.Entry<Integer, Integer> entry : hm.entrySet()) {
    System.out.println("(" + entry.getKey() + ", " + entry.getValue() + ")");
}

(0, -5)
(1, 15)
(2, 25)
(3, 71)
(4, 63)

Демо

...