这样的一个需求,资产数量升序排列,资产数量相同的按通过率降序排序,通过率也相同的按名称的首字母排序。
如果在数据库中其实很好操作,因为特殊原因,目前需要在业务逻辑中进行处理。这里也顺便记录一下连续比较的用法。
待排序的数据集是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("====================数据结束排序");