在Java 8中,当流中的重复键时,如何收集形成List的值

前端之家收集整理的这篇文章主要介绍了在Java 8中,当流中的重复键时,如何收集形成List的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个二维数组或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]}
原文链接:https://www.f2er.com/java/239777.html

猜你在找的Java相关文章