【问题标题】:How to collect two string streams into a Map in Java? [duplicate]如何将两个字符串流收集到 Java 中的 Map 中? [复制]
【发布时间】:2021-05-25 19:20:51
【问题描述】:

我有两个数组如下:

k[] = {"K1","K2","K3"}
v[] = {"V1","V2","V3"}

我想以这样的方式使用 Stream API 迭代这两个数组,以便我将它们收集为 Map

[K1=V1,K2=V2,K3=V3]

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    假设两个数组的长度相同,您可以使用索引创建一个流。这可以通过IntStream.range(start,end) 来完成,其中开始为 0,结束为数组的大小。因为我们使用范围,所以不会包含结尾。

    在这个流中,你需要将结果收集到一个映射中,键是第一个数组中给定索引的值,值是第二个数组中给定索引的值。

    请注意IntStreamStream<Integer> 不同。在这种情况下,我们将需要一个整数流,以便我们可以在收集器中收集它们(收集器不适用于原始类型)。为此,请调用方法.boxed() 将其转换为Stream<Integer>

    String k[] = {"K1", "K2", "K3"};
    String v[] = {"V1", "V2", "V3"};
    
    Map<String, String> result = IntStream.range(0, k.length).boxed().collect(Collectors.toMap(i -> k[i], i -> v[i]));
    

    这给出了以下结果

    {K1=V1, K2=V2, K3=V3}
    

    【讨论】:

      【解决方案2】:
      IntStream.range(0, k.length).collect(Collectors.toMap(i -> k[i], i -> v[i]));
      

      【讨论】:

      • 显然您没有对此进行测试。它不起作用。
      • 不,我没有……但你应该解释为什么它不起作用
      • 查看@Yoni 的回答。
      • 我明白了......也许值得一提的是 Stream 与 IntStream 不同(对于像我这样的人)
      • 您不是在流式传输整数,而是通过IntStream 流式传输int。问题在于收集器。在boxed() 处理之前,它不是整数对象。
      猜你喜欢
      • 2019-12-24
      • 2019-07-04
      • 2021-12-08
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多