需求
從數據庫中查詢並彙總後的數據列表(list)在界面展示時需根據升序/降序按鈕進行排序,普通實現代碼如下:
/**
* list 排序
* @param list
* @param sidx 排序列名
* @param sord 排序方式
*/
private void sortList(List<Map<String, Object>> list, final String sidx, final String sord) {
Collections.sort(list, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
try {
for(String key : o1.keySet()){
String deptName = String.valueOf(o1.get("deptName"));
if(sidx.equals(key) && !"合計".equals(deptName)){
Integer o1Value = Integer.valueOf(String.valueOf(o1.get(sidx)));
Integer o2Value = Integer.valueOf(String.valueOf(o2.get(sidx)));
return o1Value > o2Value ? (sord.equalsIgnoreCase("asc") ? 1 : -1) : (sord.equalsIgnoreCase("asc") ? -1 : 1);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return 0;
}
});
}
用lambda表達式改造後的代碼如下:
/**
* list 排序
* @param list
* @param sidx 排序列名
* @param sord 排序方式
*/
private void sortList(List<Map<String, Object>> list, final String sidx, final String sord) {
Collections.sort(list, (Map<String, Object> o1, Map<String, Object> o2) -> {
// 或者使用list.sort方法
// list.sort(Map<String, Object> o1, Map<String, Object> o2) -> {
try {
for(String key : o1.keySet()){
String deptName = String.valueOf(o1.get("deptName"));
if(sidx.equals(key) && !"合計".equals(deptName)){
Integer o1Value = Integer.valueOf(String.valueOf(o1.get(sidx)));
Integer o2Value = Integer.valueOf(String.valueOf(o2.get(sidx)));
return o1Value > o2Value ? (sord.equalsIgnoreCase("asc") ? 1 : -1) : (sord.equalsIgnoreCase("asc") ? -1 : 1);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return 0;
});
}