Java Stream Collectors.toMap value is a Set

前端 未结 4 1161
旧巷少年郎
旧巷少年郎 2021-02-07 21:29

I want to use a Java Stream to run over a List of POJOs, such as the list List below, and transform it into a Map Map>

4条回答
  •  天涯浪人
    2021-02-07 22:13

    @Nevay 's answer is definitely the right way to go by using groupingBy, but it is also achievable by toMap by adding a mergeFunction as the third parameter:

    as.stream().collect(Collectors.toMap(x -> x.name, 
        x -> new HashSet<>(Arrays.asList(x.property)), 
        (x,y)->{x.addAll(y);return x;} ));
    

    This code maps the array to a Map with a key as x.name and a value as HashSet with one value as x.property. When there is duplicate key/value, the third parameter merger function is then called to merge the two HashSet.

    PS. If you use Apache Common library, you can also use their SetUtils::union as the merger

提交回复
热议问题