按两个字段排序Arraylist(Java)

4ou*_*ord 4 java arraylist

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

基本上我需要一种方法来按两个字段对ArrayList进行排序 - 首先得分,从低到高,然后如果得分匹配则按ID排序.删除我已经覆盖的多余元素,尽管如果有一种集成方法我会有兴趣听到它.

编辑:我正在尝试对具有这些属性的对象的Arraylist进行排序,而不是仅仅抛出它们的单个arraylist.我的坏.

mat*_*sev 5

如果您使用Java 8,那么使用方法引用嵌套比较器的方法很简单:

List<Player> players = // ...

players.sort(Comparator
    .comparing(Player::getScore)
    .thenComparing(Player::getId));
Run Code Online (Sandbox Code Playgroud)

可以在Comparator JavaDoc中找到更多信息.

  • Java突然变得如此性感,难道你不爱它吗?:) (3认同)