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)方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容