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
Java中单列集合List排序的真实应用场景的更多相关文章
- JAVA中的集合与排序
一:常见的集合类 Collection接口 和 Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...
- Java中list集合自定义排序-2022新项目
一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...
- java中list集合的内容,如何使用像数据库中group by形式那样排序
java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name mone ...
- Java中的集合(二)单列集合顶层接口------Collection接口
Java中的集合(二)单列集合顶层接口------Collection接口 Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法.由于Iterab ...
- 分享知识-快乐自己:Java中各种集合特点
Java中各种集合特点: Collection[单列集合]: List(有序,可重复): ArrayList: 底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector: 底层数据结构是 ...
- Java中的集合(十一) 实现Map接口的TreeMap
Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...
- Java中的集合(七)双列集合顶层接口------Map接口架构
Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...
- 菜鸟日记之 java中的集合框架
java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...
- (转)java中对集合对象list的几种循环访问总结
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
随机推荐
- Tree UVA - 548
You are to determine the value of the leaf node in a given binary tree that is the terminal node o ...
- Circular Sequence UVA - 1584
Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequ ...
- JAVAEE_02_BS/CS架构
BS/CS架构 系统构架分为? C/S: Client/Server B/S: Browser/Server B/S的优缺点? 优点: 1. 不需要安装特定的客户端软件,只需要浏览器. 2. 升级只需 ...
- Dynamics CRM实体系列之键
这一节开始讲一下Dynamics CRM实体的键.键的作用个我们平时创建Primary Key的概念差不多.保证数据的唯一性. 键的设置在后台实体导航下面的键选项 点击新建创建一个键,会弹出一个窗口进 ...
- 2021S软件工程——结对项目第三阶段
2021S软件工程--结对项目第三阶段 2021春季软件工程(罗杰 任健) 项目地址 1020 1169 1 实践反思 1.1 问题分析 两人习惯不一致 没有具体制定时间节点 写完代码才开始" ...
- Josephus问题的queue解法
问题描述 Josephus问题是一个非常古老的问题.它的范型描述为N个人(0到N-1)围成一圈报数,报道M的人会被剔除,直到最后一个人. 要求找出最后一个人的位置或这N个人被剔除的顺序. 解决思路 我 ...
- OAuth 2.0、OIDC 原理
OAuth 目录 OAuth 什么是 OAuth? 为什么是 OAuth? SAML OAuth 和 API OAuth 主要组件 OAuth 作用域 OAuth 参与者 OAuth 令牌 OAuth ...
- .NET 中的 Worker Service 入门介绍
翻译自 Steve Gordon 2020年3月30日的文章 <WHAT ARE .NET WORKER SERVICES?> [1] 随着 .NET Core 3.0 的发布,ASP.N ...
- Hydra暴力破解工具的用法
目录 Hydra 常见参数 破解SSH 破解FTP 破解HTTP 破解3389远程登录 Kali自带密码字典 dirb dirbuster fern-wifi metasploit wfuzz Hyd ...
- Win64 驱动内核编程-27.强制读写受保护的内存
强制读写受保护的内存 某些时候我们需要读写别的进程的内存,某些时候别的进程已经对自己的内存读写做了保护,这里说四个思路(两个R3的,两个R0的). 方案1(R3):直接修改别人内存 最基本的也最简单的 ...