当前位置: 代码迷 >> java >> 使用Collectors.groupingby创建一个集合的映射
  详细解决方案

使用Collectors.groupingby创建一个集合的映射

热度:14   发布时间:2023-07-25 19:03:03.0

我知道如何使用Collectors.groupingBy创建Map<T, List<U>>

Map<Key, List<Item>> listMap = items.stream().collect(Collectors.groupingBy(s->s.key));

如何修改该代码以创建Map<Key, Set<Item>> 或者我可以不使用stream ,所以必须使用for循环等手动创建它?

使用Collectors.toSet()作为的下游:

Map<Key, Set<Item>> map = items.stream()
            .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));

你必须使用这样的下游收集器:

Map<Key, Set<Item>> listMap = items.stream()
    .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));

我有时也喜欢非流解决方案:

 Map<Key, Set<Item>> yourMap = new HashMap<>();
 items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));

如果你真的想要你也可以通过compute/merge方法来做同样的事情