如何在 Java 中将两个字符串流收集到 Map 中?

AMO*_*JAN 0 java java-stream

我有两个数组如下:

k[] = {"K1","K2","K3"}
v[] = {"V1","V2","V3"}
Run Code Online (Sandbox Code Playgroud)

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

[K1=V1,K2=V2,K3=V3]
Run Code Online (Sandbox Code Playgroud)

小智 5

IntStream.range(0, k.length).collect(Collectors.toMap(i -> k[i], i -> v[i]));
Run Code Online (Sandbox Code Playgroud)


Yon*_*oni 5

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

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

请注意, anIntStream与 a 不同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]));
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果

{K1=V1, K2=V2, K3=V3}
Run Code Online (Sandbox Code Playgroud)