对List对象中的子对象的某个字段进行排序
首先初始化数据:
Student student1 = new Student("1","2",90,new User("1","2",10,"11"),"");
Student student2 = new Student("2","3",840,new User("4","2",10,"11"),"");
Student student3 = new Student("3","4",80,new User("3","2",10,"11"),"");
Student student4 = new Student("4","7",90,new User("2","2",10,"11"),"");
List<Student> students = new ArrayList<>();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
根据Student中的User对象的id字段进行倒序排列
List<Student> studentList = students.stream()
.sorted(Comparator.comparing((Function<Student,String>)student -> student.getUser().getId()).reversed())
.collect(Collectors.toList());
方法二:
students.stream().forEach(student -> student.setUserId(student.getUser().getId()));
List<Student> list = students.stream().sorted(Comparator.comparing(Student::getUserId).reversed()).collect(Collectors.toList());
students.sort(Comparator.comparing(Student::getUserId).reversed());
对List对象中的某个字段进行排序
首先初始化数据:
User user1 = new User("1","2",10,"11");
User user2 = new User("4","2",8,"11");
User user3 = new User("3","2",10,"11");
User user4 = new User("2","2",20,"11");
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
根据java8后的lambda表达式进行正序排序
List<User> users = userList.stream().sorted(Comparator.comparing(User::getId).reversed())
.collect(Collectors.toList());
根据Collections的compare内置方法进行正序排序
Collections.sort(userList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
//降序,
return o2.getId().compareTo(o1.getId());
}
});
简化后的写法
Collections.sort(userList, (o1, o2) -> o2.getId().compareTo(o1.getId()));
完整对象的补充
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String id;
private String grade;
private Integer score;
private User user;
private String userId;
}