Java8对List集合对象某个字段进行排序

1、声明一个测试对象 

import java.time.LocalDate;
import java.util.List;
import lombok.Data;

@Data
public class StudentInfo{

    //名称
    private String name;

    //性别 true男 false女
    private Boolean gender;

    //年龄
    private Integer age;

    //身高
    private Double height;

    //出生日期
    private LocalDate birthday;

}

2、添加一些测试数据

//测试数据,请不要纠结数据的严谨性
List<StudentInfo> studentList = new ArrayList<>();
studentList.add(new StudentInfo("李小明",true,18,1.76,LocalDate.of(2001,3,23)));
studentList.add(new StudentInfo("张小丽",false,18,1.61,LocalDate.of(2001,6,3)));
studentList.add(new StudentInfo("王大朋",true,19,1.82,LocalDate.of(2000,3,11)));
studentList.add(new StudentInfo("陈小跑",false,17,1.67,LocalDate.of(2002,10,18)));

使用年龄进行升序排序

//排序前输出
StudentInfo.printStudents(studentList);
//按年龄排序(Integer类型)
List<StudentInfo> studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge)).collect(Collectors.toList());
//排序后输出
StudentInfo.printStudents(studentsSortName);

排序后结果

 使用年龄进行降序排序(使用reversed()方法)

//排序前输出
StudentInfo.printStudents(studentList);
//按年龄排序(Integer类型)
List<StudentInfo> studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge).reversed()).collect(Collectors.toList());
//排序后输出
StudentInfo.printStudents(studentsSortName);

排序后结果

 使用年龄进行降序排序,年龄相同再使用身高升序排序

//排序前输出
        StudentInfo.printStudents(studentList);
        //按年龄排序(Integer类型)
        List<StudentInfo> studentsSortName = studentList.stream()
                .sorted(Comparator.comparing(StudentInfo::getAge).reversed().thenComparing(StudentInfo::getHeight))
                .collect(Collectors.toList());
        //排序后输出
        StudentInfo.printStudents(studentsSortName);

排序后结果

4、最后一个方法使用lambda表达式进行排序

声明一个对象

class User{
        private Integer userId;
        private String userName;

        public Integer getUserId() {
            return userId;
        }

        public void setUserId(Integer userId) {
            this.userId = userId;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public User(Integer userId, String userName) {
            this.userId = userId;
            this.userName = userName;
        }

        public User() {
        }

        @Override
        public String toString() {
            return "User{" +
                    "userId=" + userId +
                    ", userName='" + userName + '\'' +
                    '}';
        }
    }

测试

@Test
    public void lambdaTest1(){
        List<User> list = new ArrayList<>();
        list.add(new User(1,"张三"));
        list.add(new User(4,"赵六"));
        list.add(new User(2,"李四"));
        list.add(new User(3,"王五"));
            
        //条件删除
        list.removeIf(user -> user.getUserId() == 3);
        System.out.println("--------------排序前");
        list.forEach(user -> {
            System.out.println(user);
        });
        list.sort((user1,user2)->user1.getUserId() - user2.getUserId());
        System.out.println("_-------------------正序排序后");
        list.forEach(user -> {
            System.out.println(user);
        });

        System.out.println("--------------------倒序排序后:");
        list.sort((((o1, o2) -> o2.getUserId() - o1.getUserId())));
        list.forEach(user -> {
            System.out.println(user);
        });
    }

输出结果

猜你喜欢

转载自blog.csdn.net/Romantic_321/article/details/107252796