zoukankan      html  css  js  c++  java
  • Java 集合多字段排序

    @Data
    @AllArgsConstructor
    public class Person {
        Integer id;
        Integer age;
        Integer type;
    
        public static void main(String[] args) {
            List<Person> persons = new ArrayList<>();
    
            persons.add(new Person(7, 10, 1));
            persons.add(new Person(2, 10, 1));
            persons.add(new Person(5, 10, 1));
            persons.add(new Person(3, 26, 2));
            persons.add(new Person(4, 35, 2));
            persons.add(new Person(6, 23, 2));
            persons.add(new Person(10, 23, 3));
            persons.add(new Person(11, 24, 3));
            persons.add(new Person(11, 23, 3));
    
            persons = persons.stream()
                .sorted(
                    Comparator.comparing(Person::getType).reversed()
                        .thenComparing(Person::getId)
                        .thenComparing(Comparator.comparing(Person::getAge).reversed())
                ).collect(Collectors.toList());
            System.out.println(JSON.toJSONString(persons));
        }
        
    }
    

    上面的代码,先对 type 降序, 再对 id 升序,最后对 age 降序。输出结果如下:

    persons: [{"age":10,"id":7,"type":1},{"age":10,"id":2,"type":1},{"age":10,"id":5,"type":1},{"age":26,"id":3,"type":2},{"age":35,"id":4,"type":2},{"age":23,"id":6,"type":2},{"age":23,"id":10,"type":3},{"age":24,"id":11,"type":3},{"age":23,"id":11,"type":3}]
    
    result: [{"age":23,"id":10,"type":3},{"age":24,"id":11,"type":3},{"age":23,"id":11,"type":3},{"age":26,"id":3,"type":2},{"age":35,"id":4,"type":2},{"age":23,"id":6,"type":2},{"age":10,"id":2,"type":1},{"age":10,"id":5,"type":1},{"age":10,"id":7,"type":1}]
    

    上面的例子,是以为要输出原集合和结果集合,所有才用stream做演示,如果仅仅只是需要对列表做排序,可直接用List#sort(Comparator<? super E> c)方法。

    站在巨人肩膀上摘苹果

    https://www.jianshu.com/p/f38aeb894e9c

  • 相关阅读:
    趋势线突破有效的标志 武胜
    jira 试用license
    Jmeter使用指南
    linux c mysql 编程
    apache module 读取配置文件
    solr 中文分词 mmseg4j 使用例子 ,NGramTokenizerFactory
    使用CTabCtrl控件实现属性页功能
    linux 命令
    vc++2008 采用GSoap访问 WebService
    apr 编程demo出错。
  • 原文地址:https://www.cnblogs.com/eternityz/p/13683897.html
Copyright © 2011-2022 走看看