Java-对象集合排序
方法
public class CollectionTest {
private static List<Person> getList() {
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("张三", 20));
list.add(new Person("李四", 50));
list.add(new Person("王五", 25));
list.add(new Person("赵六", 4));
list.add(new Person("marry", 35));
list.add(new Person("jack", 35));
list.add(new Person("ashe", 35));
return list;
}
@Data
static class Person {
private String name;
private Integer age;
private Integer rank;
private Student[] students;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public Person(String name, Student[] students) {
this.name = name;
this.students = students;
}
@Override
public String toString() {
return "Person{" +
"name='" + this.name + '\'' +
", age=" + this.age +
", rank=" + this.rank +
", students=" + Arrays.toString(this.students) +
'}';
}
}
@Data
static class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + this.name + '\'' +
", age=" + this.age +
'}';
}
}
@Test
public void test() {
List<Person> listFirst = new LinkedList<>(getList());
List<Person> listSecond = new LinkedList<>(getList());
System.out.println("------初始------");
listFirst.forEach(System.out::println);
//方式一 stream
List<Person> listFirstSort = listFirst.stream().sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
listFirstSort.forEach(System.out::println);
System.out.println("------stream 排序------");
// 方式二
listSecond.sort(Comparator.comparing(Person::getAge));
listSecond.forEach(System.out::println);
System.out.println("------sort 排序------");
}
}
原理
都是在JDK1.8 以后出现的特性
方法1:
集合转换为数据流,运用比较器(函数式接口)对实体类中的字段排序
方法2:
直接对集合运用比较器(函数式接口)对实体类中的字段排序。
注意:方式二:变量会引用结果 而 方式一 需要一个新的变量引用

浙公网安备 33010602011771号