将Set <V>转换为Map <String,Set <String>

Nil*_*rai 0 java collect java-8 java-stream

我有以下收藏:

Set<Map.Entry<Event, Long>> entries
Run Code Online (Sandbox Code Playgroud)

事件POJO:

public class Event{
    private long epoch; 
    private List<Pair<String, String> eventParams; 
}
Run Code Online (Sandbox Code Playgroud)

我想将条目集合转换为 Map<String, Set<String>>

例:

List<Pair<String, String> eventParams = Arrays.asList(Pair.of("abc","123"), Pair.of("abc","456"));
Run Code Online (Sandbox Code Playgroud)

转换后的集合:

Map<String, Set<String>> converted = ["abc", ["123", "456"]]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下操作:

entries.stream().flatMap(x -> x.getKey().getEventParams().stream())
            .collect(Collectors.groupingBy(Pair::getKey, Collectors.toSet(Pair::getValue)));
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误消息:无法应用Collector中的toSet

正确的做法是什么?

And*_*lko 8

更换

Collectors.toSet(Pair::getValue)
Run Code Online (Sandbox Code Playgroud)

Collectors.mapping(Pair::getValue, Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)

问题在于Collectors.toSet()它没有任何参数,它对输入流定义的类型进行操作。Collectors.mapping(mapper, downstream)通过“在累积之前将映射函数应用于每个输入元素”来更改此行为。