Guava ImmutableSortedMultiset:如何“总结”两个实例?

时间:2014-03-13 16:53:21

标签: java guava multiset

我正在尝试将两个SortedMultiset合并或“求和”为一个。但是,在Multisets类中,没有这样的方法。我想做点什么:

// this is just an example, the actual sets would be created differently (they are NOT empty!)
SortedMultiset<Integer> set1 = ImmutableSortedMultiset.of();
SortedMultiset<Integer> set2 = ImmutableSortedMultiset.of();
SortedMultiset<Integer> sum = Multisets.sum(set1, set2);

但这会导致:

java: incompatible types
required: com.google.common.collect.SortedMultiset<java.lang.Integer>
found:    com.google.common.collect.Multiset<java.lang.Integer>

我可以通过更改两个类的类型来完成此操作,如下所示:

Multiset<Integer> set1 = // create the first one...
Multiset<Integer> set2 = // create the second one...
Multiset<Integer> sum = Multisets.sum(set1,set2); // does NOT work
SortedMultiset<Integer> sortedSum = ImmutableSortedMultiset.copyOf(sum.iterator());

我想知道是否有办法更优雅地实现这一点,而且最重要的是直接使用SortedMultiset个实例,如第一个例子所示。

修改

我缺少的部分是这一行:

SortedMultiset<Integer> sum = Multisets.sum(set1, set2);

应该是:

SortedMultiset<Integer> sortedSum = ImmutableSortedMultiset.copyOf(Multisets.sum(set1, set2));

1 个答案:

答案 0 :(得分:1)

路易斯是绝对正确的,Multisets.sum(set1, set2)当然有效,复制到ImmutableSortedMultiset也不会造成任何麻烦。

public static void main(String[] args) {

    final SortedMultiset<Integer> set1 = ImmutableSortedMultiset.of(1, 2, 2, 3, 3, 3);
    final SortedMultiset<Integer> set2 = ImmutableSortedMultiset.of(1, 1, 2, 4);
    final SortedMultiset<Integer> sum = ImmutableSortedMultiset.copyOf(Multisets.sum(set1, set2));
    System.out.println(sum);
}

输出:

[1 x 3, 2 x 3, 3 x 3, 4]

我怀疑这是你编辑过的文章,并替换为给你带来麻烦的ImmutableSortedMultiset.of();。但是我不能过多评论,因为你忽略了分享它。

相关问题