随笔 - 424  文章 - 0  评论 - 89  阅读 - 48万

lambda排序小记

一、按照几个字段分别排序:

Student:

package com.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@AllArgsConstructor
public class Student {

    private String name;
    private int age;
    private String classroom;
}
package com.test.lamdba;

import com.model.Student;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class TestComparator {

    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("zhangsan", 10, "A"));
        studentList.add(new Student("wangwei", 12, "D"));
        studentList.add(new Student("wangwei", 11, "D"));
        studentList.add(new Student("lisi", 14, "F"));
        studentList.add(new Student("lisi", 14, "C"));
        sort(studentList);

        System.out.println(studentList);
    }

    /**
     * 先按学生的姓名自然排序
     * 再按年龄排序
     * 再按班级号逆序排序
     *
     * @param studentList
     */
    private static void sort(List<Student> studentList) {
        studentList.sort(Comparator.comparing(Student::getName, Comparator.naturalOrder())  //这样去掉naturalOrder其实也一样,因为natureOrder的排序调的就是String的compareTo
                .thenComparingInt(Student::getAge)
                .thenComparing(Student::getClassroom, Comparator.reverseOrder())
        );
    }
}

打印:

[
Student(name=lisi, age=14, classroom=F), 
Student(name=lisi, age=14, classroom=C), 
Student(name=wangwei, age=11, classroom=D), 
Student(name=wangwei, age=12, classroom=D), 
Student(name=zhangsan, age=10, classroom=A)
]

 

 

 

 

 

--

posted on   有点懒惰的大青年  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示