根据键的值对列表进行排序

时间:2015-08-31 09:48:56

标签: java

我有一个包含用户名称的列表。

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;
        }
    }

1 个答案:

答案 0 :(得分:1)

使用比较器。您应该覆盖 compareTo 方法。在那里,您应该根据它们的值比较每个条目集。

或者,您也可以将 Sorted Maps 与自定义比较器配合使用。它会根据比较器

对您的输入集进行排序