這樣的一個需求,資產數量升序排列,資產數量相同的按通過率降序排序,通過率也相同的按名稱的首字母排序。
如果在數據庫中其實很好操作,因爲特殊原因,目前需要在業務邏輯中進行處理。這裏也順便記錄一下連續比較的用法。
待排序的數據集是List<Map<String,Object>>類型的list鏈表ownerAssetsData。
System.out.println("====================數據開始排序:");
Comparator<Map<String, Object>> comparator1 = Comparator.comparing(m -> (Integer) m.get("assetsNum"));
Comparator<Map<String, Object>> comparator2 = Comparator.comparing(m -> {
String passRateString = (String) m.get("passRate");
return Double.parseDouble(passRateString.substring(0, passRateString.length() - 1));
});
Comparator<Map<String, Object>> comparator3 = Comparator.comparing(m -> (String)
m.get("ownerName"), Collator.getInstance(Locale.CHINA));
List<Map<String, Object>> assetsNum = ownerAssetsData.stream().
sorted(comparator1.thenComparing(comparator2).thenComparing(comparator3))
.collect(Collectors.toList());
System.out.println("====================數據結束排序");