Java 集合多条件多规则排序 升序 降序 空值处理

Posted 抓手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

/**
 * @author 向振华
 * @date 2022/12/01 18:18
 */
public class Test 

    @Data
    @AllArgsConstructor
    public static class Shop 
        private String name;
        private Double price;
        private Integer count;
    

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

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

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

输出结果

Test.Shop(name=8, price=7.7, count=60)
Test.Shop(name=7, price=7.7, count=60)
Test.Shop(name=2, price=null, count=30)
Test.Shop(name=3, price=4.4, count=20)
Test.Shop(name=6, price=8.8, count=20)
Test.Shop(name=5, price=8.8, count=20)
Test.Shop(name=1, price=3.3, count=10)
Test.Shop(name=4, price=6.6, count=null)

以上是关于Java 集合多条件多规则排序 升序 降序 空值处理的主要内容,如果未能解决你的问题,请参考以下文章

SQL中升序排序字段为空值影响排序结果解决方法

MySQL数据库语句

Java实现数组降序的方法

java中,如何实现集合的升序和降序排列

SQL-ORDER BY 多字段排序(升序降序)

mysql 多重排序