0

我想在 Guava 中创建一个(不可变的)Multiset,它有一个element带有events 的条目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){}

有没有我忽略的方法可以使上面的代码更短?

4

3 回答 3

2

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

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

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

于 2012-06-10T18:45:43.953 回答
1

这是另一个选项,但它似乎不如您提供的构建器选项好:

Multiset<X> set = HashMultiset.create();
set.add(element, occurrences);
ImmutableMultiset<X> immutableSet = ImmutableMultiset.copyOf(set);
于 2012-06-05T10:23:47.033 回答
1

番石榴贡献者在这里。

坚持建设者。它已经非常简单地解决了这个问题,并且在一行中;这可能不是一个常见的情况,需要自己的特殊方法。

于 2012-06-05T14:43:50.393 回答