我想在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){}
是否有任何我忽略的方法会使上述代码缩短?
答案 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)
番石榴贡献者。
坚持建设者。它已经很简单地解决了这个问题,而且只需一行;要求自己的特殊方法可能不是一个常见的案例。