【发布时间】: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
我有两个数组如下:
k[] = {"K1","K2","K3"}
v[] = {"V1","V2","V3"}
我想以这样的方式使用 Stream API 迭代这两个数组,以便我将它们收集为 Map
[K1=V1,K2=V2,K3=V3]
【问题讨论】:
标签: java java-stream
假设两个数组的长度相同,您可以使用索引创建一个流。这可以通过IntStream.range(start,end) 来完成,其中开始为 0,结束为数组的大小。因为我们使用范围,所以不会包含结尾。
在这个流中,你需要将结果收集到一个映射中,键是第一个数组中给定索引的值,值是第二个数组中给定索引的值。
请注意IntStream 与Stream<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}
【讨论】:
IntStream.range(0, k.length).collect(Collectors.toMap(i -> k[i], i -> v[i]));
【讨论】:
IntStream 流式传输int。问题在于收集器。在boxed() 处理之前,它不是整数对象。