在Java 8中,当流中的重复键时,如何收集形成List的值
发布时间:2020-12-15 00:59:19 所属栏目:Java 来源:网络整理
导读:我有一个二维数组或EntrySet形式的元素流.我需要在地图中收集这些内容.现在的问题是元素流可以有重复的元素.假设我希望该值为列表: MapString,ListString 示例: class MapUtils{// Function to get Stream of String[]private static StreamString[] getMa
我有一个二维数组或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]上操作以解决问题.那可能吗?为此,我需要访问正在收集的当前地图对象.我不确定这是否合理. 预期产出: {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]} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |