对列表中的对象进行排名

时间:2013-02-15 09:41:20

标签: java list collections ranking

我有一个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具有相同的等级,因为它们具有相同的投票数。是否有快速实施可以做到这一点?

1 个答案:

答案 0 :(得分:2)

First 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();
}