问题描述
我知道如何使用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循环等手动创建它?
1楼
使用Collectors.toSet()
作为的下游:
Map<Key, Set<Item>> map = items.stream()
.collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));
2楼
你必须使用这样的下游收集器:
Map<Key, Set<Item>> listMap = items.stream()
.collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));
3楼
我有时也喜欢非流解决方案:
Map<Key, Set<Item>> yourMap = new HashMap<>();
items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));
如果你真的想要你也可以通过compute/merge
方法来做同样的事情