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