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);
    }
}

运行结果如下:

相关推荐
用户40315986396632 分钟前
带 WriteBuffer 的内存读写操作
java·算法
岁忧4 分钟前
(LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
java·c++·算法·leetcode·面试·go
wh_xia_jun6 分钟前
基于 Python 的数据分析技术综述
开发语言·python·数据分析
XH华25 分钟前
C语言第一章数据类型和变量(上)
c语言·开发语言
暗影~行星36 分钟前
C语言,结构体指针案例
c语言·开发语言
码银39 分钟前
基于Java的Markdown到Word文档转换工具的实现
java·word
(Charon)1 小时前
C语言手写简易 DNS 客户端(接收部分)
c语言·开发语言
ricky_fan1 小时前
解决bash终端的路径名称乱码问题
开发语言·chrome·vscode·bash
青衫客361 小时前
浅谈 Python 中的 yield——生成器对象与函数调用的区别
开发语言·python
Mr_Xuhhh1 小时前
QWidget的属性
java·数据库·c++·qt·系统架构