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 回答