gpt4 book ai didi

java - 在 Java 8 中,当流中有重复键时如何收集到一个 Map 中形成一个值列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:31 24 4
gpt4 key购买 nike

我有一个二维数组或 EntrySet 形式的元素流。我需要将这些收集到 Map 中。现在的问题是元素流可以有重复的元素。假设我希望值是一个列表:

Map<String,List<String>>

例子:

class MapUtils
{
// Function to get Stream of String[]
private static Stream<String[]> getMapStream()
{
return Stream.of(new String[][] {
{"CAR", "Audi"},
{"BIKE", "Harley Davidson"},
{"BIKE", "Pulsar"}
});
}

// Program to convert Stream to Map in Java 8
public static void main(String args[])
{
// get stream of String[]
Stream<String[]> stream = getMapStream();

// construct a new map from the stream
Map<String, String> vehicle =
stream.collect(Collectors.toMap(e -> e[0], e -> e[1]));

System.out.println(vehicle);
}
}

输出:

java.lang.IllegalStateException: Duplicate key Harley Davidson

我想有个办法

  1. 我可以对 e->e[0]e->e[1] 进行操作来解决问题。那可能吗?为此,我需要访问正在收集的当前 map 对象。我不确定这是否有意义。
  2. 一种可以使用 Java 8 流实现此目的的方法。

预期输出:

{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}

最佳答案

这就是 groupingBy 的用途:

Map<String,List<String>> vehicle = 
stream.collect(Collectors.groupingBy(e -> e[0],
Collectors.mapping(e -> e[1],
Collectors.toList())));

输出 map :

{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}

关于java - 在 Java 8 中,当流中有重复键时如何收集到一个 Map 中形成一个值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52143101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com