如何对存储自定义对象的ArrayList按年龄排序并输出完整信息?
按Age升序排序自定义对象ArrayList并输出完整信息
你之前提取age单独排序的方式会丢失年龄与原对象的关联,正确的做法是直接对存储ClassName对象的ArrayList排序,这样排序后每个元素依然是完整的对象,就能直接输出所有属性。以下是几种常用实现方式:
方法1:让自定义类实现Comparable接口
这种方式适合固定需要按age排序的场景,让ClassName类实现Comparable接口,重写compareTo方法定义排序规则:
import java.util.ArrayList; import java.util.Collections; class ClassName implements Comparable<ClassName> { private String name; private String lastName; private int age; // 构造方法 public ClassName(String name, String lastName, int age) { this.name = name; this.lastName = lastName; this.age = age; } // Getter方法,用于获取属性值输出 public String getName() { return name; } public String getLastName() { return lastName; } public int getAge() { return age; } // 定义按age升序的排序规则 @Override public int compareTo(ClassName other) { return Integer.compare(this.age, other.age); // 若需降序,改为:return Integer.compare(other.age, this.age); } } public class Main { public static void main(String[] args) { ArrayList<ClassName> objList = new ArrayList<>(); // 添加测试数据 objList.add(new ClassName("Alice", "Smith", 35)); objList.add(new ClassName("Bob", "Johnson", 23)); objList.add(new ClassName("Charlie", "Brown", 28)); // 直接对对象列表排序 Collections.sort(objList); // 按要求格式输出 for (ClassName obj : objList) { System.out.println("Name: " + obj.getName()); System.out.println("Last name: " + obj.getLastName()); System.out.println("Age: " + obj.getAge()); System.out.println(); // 每个对象后换行分隔 } } }
方法2:使用Comparator(不修改原类)
如果不想修改ClassName类的结构,或者只是临时需要按age排序,可以用Comparator指定排序规则,适合Java 8及以上版本:
方式2.1:匿名内部类(兼容低版本Java)
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; class ClassName { private String name; private String lastName; private int age; public ClassName(String name, String lastName, int age) { this.name = name; this.lastName = lastName; this.age = age; } public String getName() { return name; } public String getLastName() { return lastName; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { ArrayList<ClassName> objList = new ArrayList<>(); objList.add(new ClassName("Alice", "Smith", 35)); objList.add(new ClassName("Bob", "Johnson", 23)); objList.add(new ClassName("Charlie", "Brown", 28)); // 匿名内部类定义排序规则 Collections.sort(objList, new Comparator<ClassName>() { @Override public int compare(ClassName o1, ClassName o2) { return Integer.compare(o1.getAge(), o2.getAge()); } }); // 输出逻辑同方法1 for (ClassName obj : objList) { System.out.println("Name: " + obj.getName()); System.out.println("Last name: " + obj.getLastName()); System.out.println("Age: " + obj.getAge()); System.out.println(); } } }
方式2.2:Lambda表达式(Java 8+)
用Lambda简化排序代码,更简洁:
// 替换排序部分,两种写法都可以 Collections.sort(objList, (o1, o2) -> Integer.compare(o1.getAge(), o2.getAge())); // 或者用List自带的sort方法 objList.sort((o1, o2) -> Integer.compare(o1.getAge(), o2.getAge()));
方式2.3:方法引用(Java 8+)
借助Comparator.comparingInt进一步简化:
objList.sort(Comparator.comparingInt(ClassName::getAge));
运行以上任意代码,都会输出符合你要求的格式:
Name: Bob Last name: Johnson Age: 23 Name: Charlie Last name: Brown Age: 28 Name: Alice Last name: Smith Age: 35
内容的提问来源于stack exchange,提问作者megami
相关产品推荐
相关产品推荐

