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类型的遍历,还是有一 ...
随机推荐
- 交换机之间的通信 VLAN和trunk
只有 PC0和PC2可通信,PC1和PC3可通信 将PC0和PC2加入同一个VLAN 将PC1和PC3加入同一个VLAN 将左边的交换机的Fa0/3口开启trunk模式即可(如下图)
- 一起来看Java设计思想之23种设计模式
目录 怎么使用设计模式 23种设计模式 创建型模式 结构型模式 行为型模式 总结 怎么使用设计模式 为什么要使用设计模式? 编写代码,写接口.写类.写方法 用设计模式做设计的作用是什么? 指导.规定如 ...
- IP Networks UVA - 1590
Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...
- 痞子衡嵌入式:i.MXRT中FlexSPI外设对AHB Burst Read特性的支持
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是FlexSPI外设对AHB Burst Read特性的支持. 痞子衡之前写过一篇关于FlexSPI LUT的文章 <从头开始认识i ...
- D - The Frog's Games (二分)
The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog Triathlon. On ...
- Semi-Prime(set)
Prime Number Definition An integer greater than one is called a prime number if its only positive di ...
- 小图标文字对齐的终极解决方案demo
CSS代码: .icon { display: inline-block; width:20px; height:20px; background: url(delete.png) no-repeat ...
- C/C++ 导入表与IAT内存修正
本章教程中,使用的工具是上次制作的PE结构解析器,如果还不会使用请先看前一篇文章中对该工具的介绍,本章节内容主要复习导入表结构的基础知识点,并通过前面编写的一些小案例,实现对内存的转储与导入表的脱壳修 ...
- hdu3714 水三分
题意: 给你一些函数 y = ax^2 + bx + c,的a >= 0 的二次函数,x的范围是0--1000, 问你在这个范围内函数值最大的最小是多少,最大指的是对于某一个x最大的 ...
- Github搜索语法
目录 使用 Github 进行邮件配置信息收集 使用Github进行数据库信息收集