您的位置 首页 java

java List 排序问题,对任意List进行排序,

一个通用的 java 排序,如果需要 整型的,或者 其他的,可以 用相应的替换掉 BigDecimal 就可以了。

使用场景,我的使用场景是 股票 分析,需要 换手率 排名,市值排名,主力净额,主力净占比,超大单净额,超大单净占比,等等,几十个可以排名的内容,如果按照普通的方式去写,好麻烦,于是就想了一个办法。通用排序就有啦。

先上结果:

程序使用时间

调用方法:

 public  String   Sort Test(String sortName, String recordDay, String recordTime) {
long start = System.currentTimeMillis();
System.out.println("从数据库获取时间 start:" + start);
List<Stock> stockList = this.stockWebManager.getAllStockList(recordDay, recordTime); // 这里从数据库获取数据,什么都行
long end = System.currentTimeMillis();
System.out.println("从数据库获取时间 end:" + end);
System.out.println("从数据库获取时间 汇总 :" + (end - start));
start = System.currentTimeMillis();
List< JSON Object> objList = new ArrayList<>();
for (Stock stock : stockList) {
objList.add((JSONObject) JSONObject.toJSON(stock)); // 获取的数据转换成  JSONObject 放在list里面。
}
end = System.currentTimeMillis();
System.out.println("转 JSONObject 汇总 :" + (end - start));
start = System.currentTimeMillis();
List<Stock> sortStockList = new ArrayList<>();
List<JSONObject> sortObjList = this.sortBigDecimal(objList, "stockCode", sortName, "desc");  // 调用排序方法
for (JSONObject obj : sortObjList) {
sortStockList.add(JSONObject.toJavaObject(obj, Stock.class));  // 将排序后的 JSONObject 再转换回来。
}
end = System.currentTimeMillis();
System.out.println("排序,并转回来, 汇总 :" + (end - start));
return this.jsonResult.ok(sortStockList);
}  

核心代码:

 import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util. HashMap ;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;

@Component("sortUtils")
public class SortUtils {

public List<JSONObject> sortBigDecimal(List<JSONObject> objList, String uniqueKeyName, String sortName, String desc) {
List<JSONObject> resultList = new ArrayList<>();
List<BigDecimal> sortList = new ArrayList<>();
Map<BigDecimal,  Map <String, JSONObject>>  sort Map = new HashMap<>();
for (JSONObject obj : objList) {
if (sortMap.get(obj.getBigDecimal(sortName)) == null) {
sortMap.put(obj.getBigDecimal(sortName), new HashMap<>());
sortList.add(obj.getBigDecimal(sortName));
}
sortMap.get(obj.getBigDecimal(sortName)).put(obj.getString(uniqueKeyName), obj);
}
if (desc == null || desc.trim().length() == 0 || "desc".equals(desc.trim())) {
Collections.sort(sortList, Collections.reverseOrder()); // 倒序
} else {
Collections.sort(sortList); // 正序
}
Map<String, JSONObject> tmpMap;
for (BigDecimal i : sortList) {
tmpMap = sortMap.get(i);
for (JSONObject obj : tmpMap.values()) {
resultList.add(obj);
}
}
return resultList;
}
}  

文章来源:智云一二三科技

文章标题:java List 排序问题,对任意List进行排序,

文章地址:https://www.zhihuclub.com/197928.shtml

关于作者: 智云科技

热门文章

网站地图