【发布时间】:2019-02-08 02:50:23
【问题描述】:
我有一个二维数组或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
我想有个办法
- 我可以操作
e->e[0]和e->e[1]来解决问题。那可能吗?为此,我需要访问正在收集的当前地图对象。我不确定这是否有意义。 - 一种可以使用 Java 8 流实现此目的的方法。
预期输出:
{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}
【问题讨论】:
标签: java java-8 hashmap java-stream