我有一个包含用户名称的列表。
List<String> members = new ArrayList<>();
我将这些用户及其积分存储起来:
Map<String, Integer> membersAndPoints = new HashMap<>();
for(String member : members) {
membersAndPoints.put(member, Utils.getPoints(member));
}
请注意,这些点并不是唯一的,如果多个用户具有相同的点,则它们必须位于相似的位置。 然后我想根据地图的值对成员进行排序,这就是我不知道该怎么做。 如果一个成员有1000分,而其他人没有,那么该成员将位于排名的第0位,依此类推。
List<String> ranking = new ArrayList<>();
看着响应,我得到了这个,但我不确定它是不是我想要的。
Collections.sort(clans, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.valueOf(Utils.getPoints(o1)).compareTo(Integer.valueOf(Utils.getPoints(o2)));
}
});
编辑: 我做了这个,它的确有效:
List<String> list = new ArrayList<String>() {
{
add("Example1");
add("Example2");
add("Example3");
add("Example4");
add("Example5");
}
};
list.sort(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return getFor(s2).compareTo(getFor(s1));
}
});
for(String s : list) {
System.out.println(String.format("%s : %s", s, getFor(s)));
}
}
public static Integer getFor(String s) {
switch (s) {
case "Example1":
return 29;
case "Example2":
return 94;
case "Example3":
return 67;
case "Example4":
return 34;
case "Example5":
return 94;
default:
return 0;
}
}
答案 0 :(得分:1)
使用比较器。您应该覆盖 compareTo
方法。在那里,您应该根据它们的值比较每个条目集。
或
或者,您也可以将 Sorted Maps
与自定义比较器配合使用。它会根据比较器