如何使用Java 8 Stream API将int原始数组转为索引为键、元素为值的Map
问题原因
你编写的代码报错是因为IntStream是Java针对基础类型int设计的专用流,它的collect方法参数规则和泛型Stream<T>不同,无法直接传入Collectors.toMap这类Collector实例,需要先将基础类型int装箱为包装类型Integer,转为Stream<Integer>后再执行收集操作。
正确实现代码
int[] nums = {1, 3, 5, 7, 9}; Map<Integer, Integer> indexValueMap = IntStream.range(0, nums.length) // 把基础类型int流转为包装类型Integer的泛型流 .boxed() .collect(Collectors.toMap( index -> index, // 键为数组下标 index -> nums[index] // 值为对应下标的数组元素 ));
补充说明
因为数组下标天然唯一,不需要额外处理键冲突的逻辑,上述代码可以直接正常运行,最终生成的Map完全符合下标为键、元素为值的需求。
内容的提问来源于stack exchange,提问作者Maksym Fishchyn
相关产品推荐
相关产品推荐

