系统开发系列 之关于Java的集合排序问题的应用

1、对List>集合中某个字段排序

//List> 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根据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,windows,开发语言,排序)