You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:对ArrayList中Boat对象的score属性进行升序排序

解决Boat对象按score升序排序的问题

嘿,我来帮你搞定这个排序需求!你找对路子了,Comparator正是用来给自定义对象集合排序的利器。先给你理清楚步骤,保证能跑通。

首先有个关键前提:你的Boat类里的score是私有属性,外部没法直接访问,所以必须先给Boat添加一个getScore()的 getter 方法,不然排序时拿不到分数值。我先把补全后的Boat类贴出来:

public class Boat {
    private String name;
    private int id;
    private int score;

    // 构造方法
    public Boat(String name, int id, int score) {
        this.name = name;
        this.id = id;
        this.score = score;
    }

    // 必须添加的getter,用于获取score
    public int getScore() {
        return score;
    }

    // 可选:重写toString方便调试时查看对象内容
    @Override
    public String toString() {
        return "Boat{name='" + name + "', id=" + id + ", score=" + score + "}";
    }
}

接下来给你三种实现排序的方式,从基础到简洁,你可以根据自己的Java版本选择:

1. 基础版:用匿名内部类实现Comparator(兼容Java 7及以下)

如果你用的是比较老的Java版本,用这种方式最稳妥。借助Collections.sort()方法,传入你的ArrayList和自定义的Comparator:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        // 初始化你的Boat集合
        ArrayList<Boat> boats = new ArrayList<>();
        boats.add(new Boat("快艇一号", 1, 85));
        boats.add(new Boat("慢船二号", 2, 40));
        boats.add(new Boat("中等船三号", 3, 60));

        // 匿名内部类定义排序规则:按score从低到高
        Collections.sort(boats, new Comparator<Boat>() {
            @Override
            public int compare(Boat b1, Boat b2) {
                // 小技巧:用Integer.compare()避免整数溢出问题(比直接相减更安全)
                return Integer.compare(b1.getScore(), b2.getScore());
                // 如果直接相减:return b1.getScore() - b2.getScore(); 也能实现升序,但score值很大时可能溢出
            }
        });

        // 打印验证排序结果
        for (Boat boat : boats) {
            System.out.println(boat);
        }
    }
}

2. 简洁版:Java 8+ Lambda表达式

Java 8引入Lambda后,代码可以大幅简化,不用写冗长的匿名内部类:

// 方式一:用Collections.sort + Lambda
Collections.sort(boats, (b1, b2) -> Integer.compare(b1.getScore(), b2.getScore()));

// 方式二:直接用List自带的sort方法(Java 8新增),更直观
boats.sort((b1, b2) -> Integer.compare(b1.getScore(), b2.getScore()));

3. 优雅版:Java 8+ 方法引用 + Comparator静态方法

用Comparator.comparingInt()结合方法引用,代码可读性拉满,一眼就能看出是按score排序:

// 按score升序排序,代码最简洁
boats.sort(Comparator.comparingInt(Boat::getScore));

额外:如果需要降序怎么办?

只需要在排序规则后面加.reversed()就行:

// 按score从高到低排序
boats.sort(Comparator.comparingInt(Boat::getScore).reversed());

最后再强调下核心逻辑:Comparator的compare()方法返回值决定了排序顺序:

  • 返回负数:b1排在b2前面
  • 返回正数:b1排在b2后面
  • 返回0:两个对象排序位置相等

内容的提问来源于stack exchange,提问作者Benjamin A G Sandøy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:13:15