3

Guava MultiMap (impl LinkedListMultimap) を使用してキーの複数の値を保存できるようにしていますが、マップを最大値で並べ替えてキーを返したいと考えています。

すなわち

最初の実行後、私は持っています

key1:{13}
key2:{7}
key3:{11}

2回目の実行後、私は今持っています

key1:{13,14}
key2:{7,18}
key3:{11,1}

3回目の実行後、私は今持っています

key1:{13,14,16}
key2:{7,18,6}
key3:{11,1,22}

の注文が欲しい

key3
key2
key1

キーを出力したい(値を知る必要はもうありません)

私はそれを行う方法を考え出すことができません.MultiMapを使用する必要はありません.

4

2 に答える 2

5

私があなたなら、 を使用せずMultimapに を使用して、Map各キーに関連付けられた最大値を追跡することから始めます。次に、 があり、後で保存する必要がない場合Map<String, Integer>は、次のようにしますMap

final Map<String, Integer> map = ...
return Ordering.natural().onResultOf(Functions.forMap(map)).reverse()
          // a comparator to compare strings in descending order of their
          // associated values
       .immutableSortedCopy(map.keySet());

少し解凍するには:

Ordering.natural() // the natural ordering on integers
  .onResultOf(
     Functions.forMap(map) // use the Map<String, Integer> as a Function
     // this ordering now compares Strings by the natural ordering of
     // the integers they're mapped to
  .reverse(); // reverses the ordering, so it now sorts in descending order
于 2012-10-18T17:24:28.213 に答える
2

私がすることは、カスタム コンパレータを使用して entrySet を TreeSet に貼り付けることです。次に、キーを引き抜きます。

sortedEntries = Sets.newTreeSet(comparator).addAll(multimap.entries());
return Collections2.transform(sortedEntries, keyExtractor);

keyExtractor、コンパレータ、およびパラメータ化の実装は、読者の課題として残されています。

于 2012-10-19T05:26:16.767 に答える