1、对List<map<string, object>>集合中某个字段排序
//List<Map<String, Object>> testList = [{name=aaa, sort=2}, {name=bbb, sort=1}, {name=ccc, sort=3}, {name=ddd, sort=5}, {name=eee, sort=4}]
//第一种
Collections.sort(testList, new MapComparatorDesc());
static class MapComparatorDesc implements Comparator<Map<String, Object>> {
@Override
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
Integer v1 = Integer.valueOf(m1.get("sort").toString());
Integer v2 = Integer.valueOf(m2.get("sort").toString());
if (v2 != null) {
return v2.compareTo(v1);
}
return 0;
}
}
Collections.sort(testList, new MapComparatorAsc());
static class MapComparatorAsc implements Comparator<Map<String, Object>> {
@Override
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
Integer v1 = Integer.valueOf(m1.get("sort").toString());
Integer v2 = Integer.valueOf(m2.get("sort").toString());
if(v1 != null){
return v1.compareTo(v2);
}
return 0;
}
}
//第二种
testList.sort((o1, o2) -> o1.get("sort").toString().compareTo(o2.get("sort").toString();
2、Map<String, List>根据value的size排序
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aaa");
list.add("ccc");
list.add("ddd");
Map<String, List<String>> group = list.stream().collect(Collectors.groupingBy(x->x));
//第一种
//根据List的size进行排序
List<Map.Entry<String, List<String>>> sortedList = group.entrySet()
.stream()
.sorted(Comparator.comparingInt(entry -> entry.getValue().size()))
.collect(Collectors.toList());
//输出结果
for (Map.Entry<String, List<String>> entry : sortedList) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
//第二种
使用Collections.sort()排序,重写compare方法;方法中比较List的size属性返回结果进行排序。
文章展示了两种在Java中对List<Map<String,Object>>集合按sort字段进行升序或降序排序的方法,以及如何对Map<String,List>根据value的size进行排序。第一种方式是使用Collections.sort()配合自定义Comparator,第二种方式利用Java8的StreamAPI进行排序。
268

被折叠的 条评论
为什么被折叠?



