加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在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]上操作以解决问题.那可能吗?为此,我需要访问正在收集的当前地图对象.我不确定这是否合理.
>使用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]}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读