当前位置: 首页 > 知识库问答 >
问题:

按两个字段排序Arraylist(Java)

廉飞捷
2023-03-14

我有一个我正在制作的纸牌游戏的高分数组列表。对于这个arraylist可以存储的分数数量需要有一个有限的限制,系统的用户可以定义这个限制(假设现在是10个)。arraylist中的对象中的字段是玩家的名称(字符串)、他们的分数(int)和玩家的(几乎)唯一的ID(Long,System.CurrentTimeMillis())。arraylist应该按分数排序,其中分数最低的是最好的。但是,如果arraylist中的所有玩家都有相同的分数,并且添加了一个新的玩家,那么我希望将具有最新分数的玩家(ID最高的玩家)存储在较旧的玩家之前,因此较旧的玩家将被丢弃。

编辑:我正在尝试用这些属性对一个对象的Arraylist进行排序,而不是一个只是抛出这些属性的Arraylist。我的错。

共有1个答案

董畅
2023-03-14

如果您使用Java8,有一种简单的方法可以嵌套比较器和方法引用:

List<Player> players = // ...

players.sort(Comparator
    .comparing(Player::getScore)
    .thenComparing(Player::getId));

更多信息可以在comparatorJavadoc中找到。

 类似资料:
  • 问题内容: 我有很多对象。 如何按名称和年龄先后按字母顺序对该数组排序? 您将使用哪种算法? 问题答案: 你可以使用以下方法: 现在按名称排序,然后按年龄排序。 “从字典上比较两个字符串”-来自docs。 是本机库中的静态方法。它会进行实际的排序,你只需要提供一个即可定义应该如何比较列表中的两个元素:这是通过提供你自己的方法实现来实现的。

  • 我有对象数组。 如何按名称和年龄按字母顺序对该数组进行排序? 你会使用哪种算法?

  • 问题内容: 我有一个从排序的csv创建的以下列表 我实际上想按两个条件对列表进行排序:首先按字段1中的值,然后按字段2中的值。我该怎么做? 问题答案: 像这样:

  • 问题内容: 我有这样的数组 如何按return_fare asc和one_way_fare asc排序值? 我尝试了array_multisort()但最终却得到了混乱的数据。 Asort仅适用于一维数组,我需要按两个或多个值进行排序,我如何才能像SQL中那样实现此功能,按field1 asc,field2 asc排序? 问题答案: 是正确的函数,您必须以某种方式搞砸了: 如果您在PHP的手册页上

  • 问题内容: 说我有两个ArrayLists: 如果我这样做:Arrays.sort(num),那么我有: 有什么办法可以对num进行排序,也可以在名称中反映出来,以便最终得到: ?请帮帮我。我想到了比较器和对象,但几乎一无所知。 问题答案: 您应该以某种方式将字段和字段 关联 到一个类中,然后获得该特定类的实例列表。在此类中,提供一种检查数值的方法。如果您对实例进行排序,则名称字段也将按照您想要的