一、需求描述

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

二、需求分析

  由于数据总量不多,可以全部查询出来,因此我就考虑使用集合工具类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

Java中单列集合List排序的真实应用场景的更多相关文章

  1. JAVA中的集合与排序

    一:常见的集合类 Collection接口  和   Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...

  2. Java中list集合自定义排序-2022新项目

    一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...

  3. java中list集合的内容,如何使用像数据库中group by形式那样排序

    java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    mone ...

  4. Java中的集合(二)单列集合顶层接口------Collection接口

    Java中的集合(二)单列集合顶层接口------Collection接口 Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法.由于Iterab ...

  5. 分享知识-快乐自己:Java中各种集合特点

    Java中各种集合特点: Collection[单列集合]: List(有序,可重复): ArrayList: 底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector: 底层数据结构是 ...

  6. Java中的集合(十一) 实现Map接口的TreeMap

    Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...

  7. Java中的集合(七)双列集合顶层接口------Map接口架构

    Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...

  8. 菜鸟日记之 java中的集合框架

    java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...

  9. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

随机推荐

  1. Day13_71_线程同步(synchronized)

    线程同步 * 异步编程模型和同步编程模拟的区别? - 有T1和T2 两个线程 > 异步编程模型:T1线程执行T1的,T2线程执行T2的,谁也不等谁 > 同步编程模型:T1和T2 线程执行, ...

  2. 前端进阶(2)使用fetch/axios时, 如何取消http请求

    前端进阶(2)使用fetch/axios时, 如何取消http请求 1. 需求 现在前端都是SPA,我们什么时候需要取消HTTP请求呢? 当我们从一个页面跳转到另外一个页面时,如果前一个页面的请求还没 ...

  3. 这种ERP系统核查工作实际是在做无用功

    前段时间跟朋友聊起他们公司持续了好几年的ERP核查工作,此时他正在一家分公司做核查.ERP核查工作我是知道的,一个季度一次,每个模块出一个人去子公司巡回巡查,主要核查ERP系统的使用情况. 核查工作主 ...

  4. 【项目管理】关于Issue/Milestone的使用指导

    b[red] { color: rgba(255, 0, 0, 1) } 前言 本指导内容主要基于: 和邹欣老师的语音交流结论 邹欣老师<构建之法>的相关章节内容 现有开源项目在类似情况下 ...

  5. 1030 Travel Plan

    A traveler's map gives the distances between cities along the highways, together with the cost of ea ...

  6. hdu3594 强连通 tarjan

    题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...

  7. hdu4115 2sat

    题意:       两个人玩剪刀石头布,他们玩了n把,给了你A这n把都出了什么,问你B能否会赢,其中A会限制B某些局数出的要相同,某些局数出的要不同,只要B满足他的限制,并且没没有输掉任何一把就算赢( ...

  8. hdu4908 中位数子串

    题意:       给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列. 思路:       首先分四中简单的情况求        (1) 就是只有他自己的那种情况 那么sum+1 ...

  9. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  10. 板载网卡MAC地址丢失后刷回方法[转]

    部份客户在进行误操作后发现网卡MAC地址全部变成0,大部客户不知道如何重新将MAC地址写回去.就此问题我们介绍一下,希望可以帮到大家.修改MAC地址时,一定要在纯DOS环境下修改.目前使用U盘DOS引 ...