Java List中通过对象属性排序,可实现多条件排序

直接上代码:

java 复制代码
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;

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

/**
 * List 对象属性排序
 */

@Data
@AllArgsConstructor
class Commodity
{
    private String name;
    private Double price;
    private Integer count;
}

public class Test {
    public static void main(String[] args) {
        // 创建参数
        List<Commodity> list = Lists.newArrayList(
                new Commodity("1", 3.3, 10),
                new Commodity("2", null, 30),
                new Commodity("3", 4.4, 20),
                new Commodity("4", 6.6, null),
                new Commodity("5", 8.8, 20),
                new Commodity("6", 8.8, 20),
                new Commodity("7", 7.7, 60),
                new Commodity("8", 7.7, 60)
        );

        // 多排序条件
        List<Commodity> orderShopList = list.stream().sorted(Comparator
                // 先按数量降序(由于是降序,nullsFirst()方法会将null值放在后面)
                .comparing(Commodity::getCount, Comparator.nullsFirst(Integer::compareTo).reversed())
                // 然后按价格升序(由于是升序,nullsFirst()方法会将null值放在前面)
                .thenComparing(Commodity::getPrice, Comparator.nullsFirst(Double::compareTo))
                // 然后按名称降序(如果不设置null值排序规则,字段为null会报错)
                .thenComparing(Commodity::getName, Comparator.reverseOrder())
        ).collect(Collectors.toList());

        // 打印排序结果
        orderShopList.forEach(System.out::println);
    }
}

运行结果如下:

相关推荐
小江的记录本几秒前
【JEECG Boot】 《JEECG Boot 数据字典使用教程》(完整版)
java·前端·数据库·spring boot·后端·spring·mybatis
Chase_______几秒前
【Python基础 | 第5章】面向对象与异常处理:一文搞懂类、对象、封装、继承、多态
开发语言·python
啦啦啦!几秒前
项目环境的搭建,项目的初步使用和deepseek的初步认识
开发语言·c++·人工智能·算法
小李云雾2 分钟前
Python Web 路由详解:核心知识点全覆盖
开发语言·前端·python·路由
鲸渔4 分钟前
【C++ 变量与常量】变量的定义、初始化、const 与 constexpr
java·开发语言·c++
i220818 Faiz Ul6 分钟前
教育资源共享平台|基于springboot + vue教育资源共享平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·教育资源共享平台
玛卡巴卡ldf6 分钟前
【Springboot7】ApachePOI文件导入导出
java·spring boot·sql
编程大师哥8 分钟前
VSCode中如何搭建JAVA+MAVEN
java·vscode·maven
不会写DN10 分钟前
SQL 单表操作全解
java·服务器·开发语言·数据库·sql
Devin~Y15 分钟前
大厂 Java 面试实战:从电商微服务到 AI 智能客服(含 Spring 全家桶、Redis、Kafka、RAG/Agent 解析)
java·spring boot·redis·elasticsearch·spring cloud·docker·kafka