基本用法
@Data
@Builder
class Student{
//学号
private String num;
//姓名
private String name;
}
public class Test {
@org.junit.Test
public void Test1(){
List<Student> stu = new ArrayList<>();
stu.add(Student.builder().num("1").name("张一").build());
stu.add(Student.builder().num("2").name("李二").build());
stu.add(Student.builder().num("11").name("王十一").build());
System.out.println("按照学号常规排序:");
stu.stream().sorted(Comparator.comparing(Student::getNum)).forEach(s->System.out.println(s));
System.out.println("按照学号转整数后排序:");
stu.stream().sorted(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return Integer.valueOf(o1.getNum()).compareTo(Integer.valueOf(o2.getNum()));
}
}).forEach(s->System.out.println(s));
System.out.println("按照学号转整数后排序 简化版:");
stu.stream().sorted(Comparator.comparing(s->Integer.valueOf(s.getNum()))).forEach(s->System.out.println(s));
}
}
运行结果:
按照学号常规排序:
Student(num=1
, name=张一)
Student(num=11
, name=王十一)
Student(num=2
, name=李二)
按照学号转整数后排序:
Student(num=1
, name=张一)
Student(num=2
, name=李二)
Student(num=11
, name=王十一)
按照学号转整数后排序 简化版:
Student(num=1
, name=张一)
Student(num=2
, name=李二)
Student(num=11
, name=王十一)
总结
对于字符类型整数排序时,我们要注意11和2的顺序问题,如果不转换类型,默认排序会将11排在2前面
那么我们就需要对字符串类型字段在排序时进行类型转换后再比较
即stu.stream().sorted(Comparator.comparing(s->Integer.valueOf(s.getNum())))