在Java中实现集合排序

使用字面量的方式创建一个集合

java 复制代码
//使用字面量的方式初始化一个List集合
        List<User> userList = Arrays.asList(
                new User("小A",5),
                new User("小鑫",18),
                new User("小昌",8),
                new User("小鑫",8));

注意:使用Arrays.asList() api方法创建出来的集合他是一个固定长度的集合,不能进行集合的添加和删除,否则会抛出 UnsupportedOperationException异常,如果你想要添加或者删除集合元素必须使用如下方式创建集合

java 复制代码
List<User> studentList = new ArrayList<>(
	Arrays.asList(new User("杨鑫"), new User("小咪"), new User("科雷"),new User("张宝"))
	);

1、实现Comparable接口,实现集合排序

1.1、实体类实现Comparable接口

java 复制代码
package com.maochang.tenancytest.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
public class User  implements Comparable<User>{

    private String name;

    private Integer age;

    /**
     * 自定义比较规格
     * @param o the object to be compared.
     * @return
     */
    @Override
    public int compareTo(User o) { //参数对象和当前对象进行比较
        //进行名称比较
        int flag = this.name.compareTo(o.name);
        //代表姓名相同
        if(flag==0){
            //A-B 如果 正数 A>B   负数A<B
            flag=this.age-o.age;
        }
        //返回比较结果
        return flag;
    }
}

1.2、使用集合工具类Collections 进行排序

java 复制代码
Collections.sort(userList);

1.3、测试方法

java 复制代码
  @Test
    void test01() {

        //使用字面量的方式初始化一个List集合
        List<User> userList = Arrays.asList(
                new User("小A",5),
                new User("小鑫",18),
                new User("小昌",8),
                new User("小鑫",8));

        //集合工具类-排序
        System.out.println("排序前:" + userList);
        System.out.println("=================开始排序==================");
        Collections.sort(userList);
        System.out.println("排序后:" + userList);
    }

2、使用Comparator 比较器实现集合对象排序

java 复制代码
public class User{
  private String name;
  private Integer age;
} 
 Collections.sort(userList,
                (o1, o2) -> {
                    int flag = o1.getName().compareTo(o2.getName());
                    if(flag == 0){
                        flag = o1.getAge() - o2.getAge();
                    }
                    return flag ;
                }
        );

简写优化写法

java 复制代码
Collections.sort(userList,
                Comparator.comparing(User::getName).thenComparingInt(User::getAge)
        );

3、使用Stream进行集合对象排序

java 复制代码
public class User{
  private String name;
  private Integer age;
} 

//如果实现了Comparable 接口
List<User> collect = userList.stream().sorted().collect(Collectors.toList());

//如果没有实现 Comparable 接口
userList.stream().sorted((o1, o2) -> {
            int flag = o1.getName().compareTo(o2.getName());
            if(flag == 0){
                flag = o1.getAge() - o2.getAge();
            }
            return flag ;
        });
//没有实现的简写方式
userList.stream().sorted(Comparator.comparing(User::getName).thenComparingInt(User::getAge));        
相关推荐
2的n次方_7 分钟前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
大模型玩家七七9 分钟前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
2501_9447114325 分钟前
JS 对象遍历全解析
开发语言·前端·javascript
CodeToGym40 分钟前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
凡人叶枫1 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
Tony Bai1 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
JMchen1231 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
小糯米6011 小时前
C++顺序表和vector
开发语言·c++·算法
froginwe111 小时前
JavaScript 函数调用
开发语言
命里有定数1 小时前
保姆级教程:在 Windows (WSL2) 下本地部署 Qwen3-ASR
windows