如何使用流将一维整数数组转换为map

时间:2018-10-05 03:09:18

标签: java-8 java-stream collectors

我有一个整数数组,我想将其转换为映射。我尝试使用下面的代码。

但是当我尝试使用以下格式的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 :(得分:1)

我认为这里的问题是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)

Demo

答案 1 :(得分:0)

您需要将IntStream装箱,因为它会流原始整数,这会导致编译错误。像这样尝试boxed()流;

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