在Java8中,如何将集合转换为以集合作为值的映射?

在Java8中,如何将集合转换为以集合作为值的映射?,java,java-8,java-stream,Java,Java 8,Java Stream,我有以下课程: class A { private String id; private String name; private String systemid; } 我得到一组a,并希望将其转换为一个映射,其中键是系统id,值是a。(map您可以使用groupingBy而不是toMap: Map<String, Set<A>> sysUidToAMap = mySet.stream() .collect(Collect

我有以下课程:

class A {
   private String id;
   private String name;
   private String systemid;
}

我得到一组a,并希望将其转换为一个映射,其中键是系统id,值是a。(
map您可以使用
groupingBy
而不是
toMap

Map<String, Set<A>> sysUidToAMap =  
    mySet.stream()
         .collect(Collectors.groupingBy(A::getSystemID,
                                        Collectors.toSet()));
Map sysUidToAMap=
mySet.stream()
.collect(收集器).groupingBy(A::getSystemID,
Collectors.toSet());
我的2×:您可以使用
收集器来完成。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;
                    }));
yourSet
.stream()
.collect(collector.toMap)(
A::getSystemId,
a->{
Set=newhashset();
增加(a);
返回集;
},(左,右)->{
左。addAll(右);
左转;
}));

由于没有专门请求流,这里有一种方法可以仅通过
映射
API来实现:

Map<String, Set<A>> map = new HashMap<>();
mySet.forEach(a -> map.computeIfAbsent(a.getSystemId(), k -> new HashSet<>()).add(a));
Map Map=newhashmap();
forEach(a->map.computeIfAbsent(a.getSystemId(),k->newhashset()).add(a));

看这里,这可能会对你有所帮助。我想问一件事。正如你所说,你有一个
集合
,你想映射它
映射
,当你映射它时,每个键将包含一个值,我想映射是有用的。如果你真的不需要
Set@Thilo是的,我只包含到集合的映射,因为这是所需的output在这个问题上。@Eran我想问一件事。我们有一个集合,我们想映射它,当你映射它时,每个键将包含一个值,映射是有用的,对不对???@SubhabrataMondal:不。同一个systemid可能有多个条目(我们不知道那是什么)。但是如果有“业务逻辑”这确保每个systemId只出现一次,那么,如果我的第一个集合包含a的10个元素,其中5个元素具有sysyemid=“1”,而其他5个元素具有systemId=“b”,则是的,
映射将更合适(转换代码应报告意外的重复项),然后我想让地图包含两个键,每个值有一组5个元素。所以它不是每个键一个值。首先,向上投票。
0.02$
是什么意思?我已经看过你说过好几次了。@holi java它有点意味着这是对已经说过的内容的一个非常小的补充,不管出于什么原因,人们都喜欢写
0。02$
而不是
,有时,他们甚至省略前面的“我的”…
Map<String, Set<A>> map = new HashMap<>();
mySet.forEach(a -> map.computeIfAbsent(a.getSystemId(), k -> new HashSet<>()).add(a));