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
相关产品推荐
相关产品推荐

