在Java中的Set中连接集合(联合)

时间:2015-05-30 17:15:51

标签: iterator set java-7 java-api set-union

我有一个地图,其中值是整数集。我想要做的是尽可能以最好的方式(仅使用Java API)很好地结合所有整数集合。

Map<Long, Set<Integer>> map;

到目前为止我想到的是循环遍历地图的values()并手动添加到大集:

Set<Integer> bigSet = new HashSet<>();
Iterator<Set<Integer>> iter = map.values().iterator();
while(iter.hasNext())
    bigSet.addAll(iter.next());

此外,由地图支持的联盟的集合也很棒。 不幸的是我被Java 7困住了。

1 个答案:

答案 0 :(得分:3)

一方面,您可以使用新的Java 8流畅界面

import static java.util.stream.Collectors.toSet;

Set<Integer> myUnion = map
        .values()
        .stream()
        .flatMap(set -> set.stream())
        .collect(toSet());

另一方面,如果您可以使用外部库,我建议您查看Guava's SetMultimap