我有一个二维数组或EntrySet形式的元素流.我需要在地图中收集这些内容.现在的问题是元素流可以有重复的元素.假设我希望该值为列表:
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"},"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]}
解决方法
这就是groupingBy的用途:
Map<String,List<String>> vehicle = stream.collect(Collectors.groupingBy(e -> e[0],Collectors.mapping(e -> e[1],Collectors.toList())));
输出图:
{CAR=[Audi],Pulsar]}