我有以下收藏:
Set<Map.Entry<Event, Long>> entries
事件POJO:
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 。
正确的做法是什么?
答案 0 :(得分:8)
替换
Collectors.toSet(Pair::getValue)
与
Collectors.mapping(Pair::getValue, Collectors.toSet())
问题是Collectors.toSet()
没有任何参数,它对输入流定义的类型进行操作。 Collectors.mapping(mapper, downstream)
通过“在积累之前对每个输入元素应用映射函数”来改变这种行为。