1

次のようにList、各オブジェクトに多数の投票があるオブジェクトがあります。

Object  Votes 
o1      5 
o2      4 
o3      3 
o4      3

投票数に基づいて(ソートだけでなく)それぞれをランク付けMapし、結果を使用して作成したいと思います。したがって、結果は次のようになります。

Object  Votes  Rank
o1      5      1
o2      4      2
o3      3      3
o4      3      3

つまり、o3 と o4 は同じ投票数を持っているため、同じランクであることがわかります。これを行う高速な実装はありますか?

4

1 に答える 1

2

最初にCollections.sortをリストに並べ替えてから、リストを繰り返し処理します。最後のオブジェクト以降に投票数が変更された場合は、ランクを上げます。投票数が同じである場合は、オブジェクト/ランクをマップに追加しないでください。

// Not tested, but it should give you the right idea.
Collections.sort(myList);  // you may need to use a comparator here if your objects don't implement Comparable
int rank = 0;
int lastVotes = -1;
for (MyObject o : list)
{
  if (o.getVotes() != lastVotes)
  {
    rank += 1;
  }
  myMap.put(o, rank);
  lastVotes = o.getVotes();
}
于 2013-02-15T09:43:29.513 に答える