工作中有个需求,list数组先根据相似度值排序,然后再按照名称的长度排序,由大到小降序。
使用到JAVA8的特性,特此记录一下:
不多说,先上代码:
private List<Map<String, Object>> sortList(List<Map<String, Object>> list){
return list.stream().sorted(Comparator.comparing(AipClientController::comparingBySimilar).reversed()
.thenComparing(Comparator.comparing(AipClientController::comparingByCommand).reversed()))
.collect(Collectors.toList());
}
//以相似度排序
private static String comparingBySimilar(Map<String, Object> map){
return (String) map.get("similar");
}
//以指令长度排序
private static Integer comparingByCommand(Map<String, Object> map){
return ((String) map.get("command")).length();
}
说明:AipClientController是类的名称;comparingBySimilar必须是static方法;reversed()方法降序排序,如果是升序可以去掉;