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

如何对存储自定义对象的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:05:12