【问题标题】:Convert Set<V> to Map<String, Set<String> [duplicate]将 Set<V> 转换为 Map<String, Set<String> [重复]
【发布时间】:2019-09-24 13:41:05
【问题描述】:

我有以下收藏:

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

事件 POJO:

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

我想将条目集合转换为Map&lt;String, Set&lt;String&gt;&gt;

例子:

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

这样做的正确方法是什么?

【问题讨论】:

    标签: java java-8 java-stream collect


    【解决方案1】:

    替换

    Collectors.toSet(Pair::getValue)
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2011-08-24
      相关资源
      最近更新 更多