Java 如何按数字对列表排序,如果重复,如何按字符串排序?

Java 如何按数字对列表排序,如果重复,如何按字符串排序?,java,sorting,data-structures,Java,Sorting,Data Structures,我有按名字命名的玩家(String name),我有情人(int Lovers) 每个玩家都有许多情人。每个玩家都有一个唯一的名字。 我想要一种按数字排序的方法,如果两个或两个以上的玩家拥有相同数量的情人,我希望他们按字母顺序排序 我考虑使用Map和Hashmap Map Players=newhashmap(); 球员。推杆(“克里斯蒂亚诺·罗纳尔多”,10); 球员。推杆(“梅西”,50); 球员。推杆(“卡卡”,10); 球员。推杆(“罗纳尔迪尼奥”,100); List sortedKe

我有按名字命名的玩家(
String name
),我有情人(
int Lovers

每个玩家都有许多情人。每个玩家都有一个唯一的名字。 我想要一种按数字排序的方法,如果两个或两个以上的玩家拥有相同数量的情人,我希望他们按字母顺序排序

我考虑使用
Map
Hashmap

Map Players=newhashmap();
球员。推杆(“克里斯蒂亚诺·罗纳尔多”,10);
球员。推杆(“梅西”,50);
球员。推杆(“卡卡”,10);
球员。推杆(“罗纳尔迪尼奥”,100);
List sortedKeys=newarraylist(Players.keySet());
收集。分类(分类键);
我发现这种方式并不适合我的情况


我所期望的是,按照恋人的数量进行排序,如果恋人的数量相等,那么我们将按名称字母顺序对他们进行排序。

使用java 8集合,它可能看起来像这样,但您可能希望按照建议创建一个类,我只是将其绘制为一个接口。如果没有
Comparator
,这种嵌套的排序功能可能会变得相当糟糕

interface Player{
    Integer getLovers();
    public String getName();
}

List<Player> sorted = players.entrySet()
            .stream()
            .map(i -> new Player(i.getKey(), i.getValue()))
            .sorted(Comparator.comparing(Player::getLovers).thenComparing(Player::getName))
            .collect(Collectors.toList());

使用Java8集合,它看起来可能是这样的,但您可能希望按照建议创建一个类,我只是将其绘制为一个接口。如果没有
Comparator
,这种嵌套的排序功能可能会变得相当糟糕

interface Player{
    Integer getLovers();
    public String getName();
}

List<Player> sorted = players.entrySet()
            .stream()
            .map(i -> new Player(i.getKey(), i.getValue()))
            .sorted(Comparator.comparing(Player::getLovers).thenComparing(Player::getName))
            .collect(Collectors.toList());

您可以考虑将播放器封装到<>代码>类播放器>代码>字段>代码>字符串名称< /代码>和<代码>列表爱好者< /代码>。然后可以使用
Collections.sort()
并传入一个自定义的
比较器。请参阅您可以考虑将播放器封装到<代码>类播放器>代码>字段>代码>字符串名称< /代码>和<代码>列表爱好者> />代码>。然后可以使用
Collections.sort()
并传入一个自定义的
比较器。看,这是不是意味着我需要为每个玩家创建一个对象?如果有,还有别的办法吗?我这么说是因为球员的名字不是固定的。它可能是用户输入的。所以我无法计算出我需要多少对象。我不知道,可变的玩家数量问题并不是什么问题,我想,我修改了答案,还添加了一个直接排序地图入口集项目方法的修改版本,只是避免在两者之间创建另一个可能再次扰乱排序顺序的地图。这是否意味着我需要为每个玩家创建一个对象?如果有,还有别的办法吗?我这么说是因为球员的名字不是固定的。它可能是用户输入的。因此,我无法计算出我需要多少对象。我不知道,可变玩家数量的问题并不是什么问题,我认为,我修改了答案,并添加了直接排序地图入口集项目方法的修改版本,只是避免在两者之间创建另一个可能再次扰乱排序顺序的地图。
List<String> names = players.entrySet().stream()
            .sorted(Comparator.comparing(Map.Entry<String, Integer>::getValue)
                    .thenComparing(Map.Entry<String, Integer>::getKey))
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());