我有以下课程:
class A {
private String id;
private String name;
private String systemid;
}
我正在获取一组A,并希望将其转换为密钥为系统ID的映射,并将值设置为A.(Map<String, Set<A>
)
可以有多个具有相同systemid的A实例。
似乎无法弄明白该怎么做.. 到了这里,但身份显然不对
Map<String, Set<A>> sysUidToAMap = mySet.stream().collect(Collectors.toMap(A::getSystemID, Function.identity()));
你能帮忙吗?
答案 0 :(得分:8)
您可以使用groupingBy
代替toMap
:
Map<String, Set<A>> sysUidToAMap =
mySet.stream()
.collect(Collectors.groupingBy(A::getSystemID,
Collectors.toSet()));
答案 1 :(得分:2)
我的2¢:你可以用Collectors.toMap
来做,但它稍微冗长一点:
yourSet
.stream()
.collect(Collectors.toMap(
A::getSystemId,
a -> {
Set<A> set = new HashSet<>();
set.add(a);
return set;
}, (left, right) -> {
left.addAll(right);
return left;
}));
答案 2 :(得分:2)
由于没有特别要求流,只有使用Map
API才能实现这一点:
Map<String, Set<A>> map = new HashMap<>();
mySet.forEach(a -> map.computeIfAbsent(a.getSystemId(), k -> new HashSet<>()).add(a));