将集合<V>转换为映射<字符串,设置<String>



我有以下集合:

Set<Map.Entry<Event, Long>> entries

活动波乔:

public class Event{
private long epoch; 
private List<Pair<String, String> eventParams; 
}

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

例:

List<Pair<String, String> eventParams = Arrays.asList(Pair.of("abc","123"), Pair.of("abc","456"));

转换后的集合:

Map<String, Set<String>> converted = ["abc", ["123", "456"]]

我尝试了以下操作:

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

但是,我收到错误:无法应用收集器中的 toSet

正确的方法是什么?

替换

Collectors.toSet(Pair::getValue)

Collectors.mapping(Pair::getValue, Collectors.toSet())

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

最新更新