【问题标题】:How to convert one dimensional array of integers into map using streams如何使用流将一维整数数组转换为映射
【发布时间】:2018-10-05 03:09:17
【问题描述】:

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

但是当我尝试使用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() 函数将数组转换为映射?

【问题讨论】:

    标签: java-8 java-stream collectors


    【解决方案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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-16
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 2011-08-24
        • 2015-07-16
        • 2019-04-03
        • 1970-01-01
        相关资源
        最近更新 更多