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 2024-12-22 11:22  有点懒惰的大青年  阅读(13)  评论(0)    收藏  举报