这个怎么按照年龄大小升序排列啊

这个排序的不会排了,是用抽象类与接口的知识嘛,怎么排列呀,谢谢啦

img

第一种方法,User实现Comparable接口,重写compareTo方法,排序则可以使用Collections.sort

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        //定义一组User数据
        List<User> userList = new ArrayList<>();
        User user = new User("1","c",12);
        userList.add(user);
        user = new User("2","b",20);
        userList.add(user);
        user = new User("3","a",12);
        userList.add(user);
        
        //排序
        Collections.sort(userList);
        //输出
        System.out.println(userList);
    }
}

class User implements Comparable{
    public String id;
    public String name;
    public int age;

    public User(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Object o) {
        User user = (User)o;
        if(this.age == user.age){
            //年龄相同,则按姓名排序
            return this.name.compareTo(user.name);
        }
        //年龄不相同,升序排列
        return this.age - user.age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

第二种,User可以不实现Comparable接口,改成在Collections.sort里面实现Comparator接口的compare方法

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

public class Test {
    public static void main(String[] args) {
        //定义一组User数据
        List<User> userList = new ArrayList<>();
        User user = new User("1", "c", 12);
        userList.add(user);
        user = new User("2", "b", 20);
        userList.add(user);
        user = new User("3", "a", 12);
        userList.add(user);

        //排序
        Collections.sort(userList, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                if (o1.age == o2.age) {
                    //年龄相同,则按姓名排序
                    return o1.name.compareTo(o2.name);
                }
                //年龄不相同,升序排列
                return o1.age - o2.age;
            }
        });

        //输出
        System.out.println(userList);
    }
}

class User {
    public String id;
    public String name;
    public int age;

    public User(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

实现 Comparable接口 重写compareTo


import lombok.Data;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        User user1 = new User("1", "测试1", 10);
        User user2 = new User("4", "测试4", 9);
        User user3 = new User("3", "测试3", 11);
        User user4 = new User("2", "测试2", 9);
        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        List<User> sortedList = userList.stream()
                .sorted(Comparator.comparing(User::getAge).thenComparing(User::getName))
                .collect(Collectors.toList());
        System.out.println(sortedList);
    }
}

@Data
class User {

    private String id;
    private String name;
    private Integer age;

    public User(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}