0

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){}

上記のコードを短くするために見落とした方法はありますか?

4

3 に答える 3

2

ビルダーを使用しない 1 行のソリューションを次に示します。

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

ただし、これには 1 つの欠点があります。その実行時間は、発生回数に比例します。パフォーマンスを向上させるには、他の方法のいずれかを使用してください。

于 2012-06-10T18:45:43.953 に答える
1

グアバの寄稿者はこちら。

ビルダーに固執します。この問題はすでに非常に簡単に、1 行で解決されています。独自の特別なメソッドを必要とするほど一般的なケースではないでしょう。

于 2012-06-05T14:43:50.393 に答える
1

ここに別のオプションがありますが、提示したビルダーオプションほど良くないようです:

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