在Guava中,如何使用单个元素和n次出现创建Multiset

时间:2012-06-05 10:14:31

标签: java guava multiset

我想在Guava中创建一个(不可变的)Multiset,它有一个条目element,其出现次数occurrences,在编译时都不知道。

我想出的是:

ImmutableMultiset.<X>builder().addCopies(element, occurrences).build()

我想我正在寻找这样的方法:

public static ImmutableMultiset<X> ImmutableMultiset.nOccurrencesOf(
X element, int occurrences){}

或:

public static ImmutableMultiset<X> Multisets.singletonMultiset(
X element, int occurrences){}

是否有任何我忽略的方法会使上述代码缩短?

3 个答案:

答案 0 :(得分:2)

这是一个不使用构建器的单行解决方案。

ImmutableMultiset<X> multiset = 
  ImmutableMultiset.copyOf(Collections.nCopies(occurrences, element));

然而,这有一个缺点:它的运行时间与出现次数成比例。为了获得更好的性能,请使用其他方法之一。

答案 1 :(得分:1)

这是另一个选项,但它看起来不像您提供的构建器选项那样好:

Multiset<X> set = HashMultiset.create();
set.add(element, occurrences);
ImmutableMultiset<X> immutableSet = ImmutableMultiset.copyOf(set);

答案 2 :(得分:1)

番石榴贡献者。

坚持建设者。它已经很简单地解决了这个问题,而且只需一行;要求自己的特殊方法可能不是一个常见的案例。