天天看点

Java中单列集合List排序的真实应用场景

一、需求描述

  最近产品应客户要求提出了一个新的需求,有一个列表查询需要按照其中的多列进行排序。

二、需求分析

  由于数据总量不多,可以全部查询出来,因此我就考虑使用集合工具类Collections.sort来直接进行排序。

三、解决方案

  列表查询的数据量不多,可以全部直接查询出来才做这样进行处理。去百度里面看了一下,方法也很简单,首先写一个排序类,主要用途就是

用来进行逻辑处理。然后在调用时,传入原集合和排序类即可。方案确定后,立马开始进行写代码,最终写完的代码如下。

public class CustomComparator implements Comparator<InventoryCompareVO> {

    private String sort;//排序标识

    public String getSort() {
        return sort;
    }

    public void setSort(String sort) {
        this.sort = sort;
    }

    public CustomComparator(){ }

    /* @Description: 单参数的构造方法
     * @author: xxx
     * @date: 2021/5/27 9:41
     * @param: No such property: code for class: Script1
     * @return:
     */
    public CustomComparator(String sort){
        this.sort = sort;
    }

    @Override
    public int compare(InventoryCompareVO o1, InventoryCompareVO o2) {
        //按照对比差异绝对值排序
        int valueOne = o1.getInventoryVariance() != null ? o1.getInventoryVariance().intValue() : 0;
        int valueTwo = o2.getInventoryVariance() != null ? o2.getInventoryVariance().intValue() : 0;
        //求绝对值
        valueOne = Math.abs(valueOne);
        valueTwo = Math.abs(valueTwo);
        if("desc".equals(this.sort)){
            //降序
            if(valueOne == 0 && valueTwo == 0){
                //先按照企业库存排序
                if(o1.getInventoryQty() != null && o2.getInventoryQty() != null){
                    return o2.getInventoryQty().compareTo(o1.getInventoryQty());
                }else{
                    //在按照海关理论库存排序
                    if(o1.getSumDclQty() != null && o2.getSumDclQty() != null){
                        return o2.getSumDclQty().compareTo(o1.getSumDclQty());
                    }
                }
                return 1;
            }else{
                return valueTwo - valueOne;
            }
        }else if("asc".equals(this.sort)){
            //升序
            if(valueOne == 0 && valueTwo == 0){
                //先按照企业库存排序
                if(o1.getInventoryQty() != null && o2.getInventoryQty() != null){
                    return o1.getInventoryQty().compareTo(o2.getInventoryQty());
                }else{
                    //在按照海关理论库存排序
                    if(o1.getSumDclQty() != null && o2.getSumDclQty() != null){
                        return o1.getSumDclQty().compareTo(o2.getSumDclQty());
                    }
                }
                return 1;
            }else{
                return valueOne - valueTwo;
            }
        }else{
            return 1;
        }
    }
}      

初始化的时候,还传递了一个参数,主要用来确定是降序还是升序。代码写好后,然后进行调用,

Collections.sort(list, new CustomComparator(String.valueOf(param.getSort())));
打包发布在测试后进行测试,程序正常运行,并且能够按照要求进行降序和升序,问题解决。

参考文章
https://www.cnblogs.com/longshiyVip/p/4882257.html