一、需求描述
最近產品應客戶要求提出了一個新的需求,有一個列表查詢需要按照其中的多列進行排序。
二、需求分析
由於資料總量不多,可以全部查詢出來,因此我就考慮使用集合工具類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