Nil*_*pal 8 java hashmap java-8 java-stream
我有一个二维数组或元素形式的元素流EntrySet.我需要将它们收集起来Map.现在的问题是元素流可以有重复的元素.假设我希望该值为列表:
Map<String,List<String>>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
java.lang.IllegalStateException: Duplicate key Harley Davidson
Run Code Online (Sandbox Code Playgroud)
我想有办法
e->e[0]并e->e[1]解决问题.那可能吗?为此,我需要访问正在收集的当前地图对象.我不确定这是否合理.{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}
Run Code Online (Sandbox Code Playgroud)
这groupingBy是为了:
Map<String,List<String>> vehicle =
stream.collect(Collectors.groupingBy(e -> e[0],
Collectors.mapping(e -> e[1],
Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
输出图:
{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}
Run Code Online (Sandbox Code Playgroud)
您可以使用groupingBy
getMapStream()
.map(item -> Arrays.asList(item))
.collect(Collectors.groupingBy(l->l.get(0),
Collectors.mapping(l1->l1.get(1),Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
toMap()或与合并功能一起使用。
Map<String,List<String>> vehicle = getMapStream()
.collect(Collectors.toMap(item->item[0],
item->new ArrayList<>(Arrays.asList(item[1])),
(l1,l2)->{l1.addAll(l2);return l1;}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |