在java日常开发中,会遇到对ist进行排序处理的需求,下面对其解决方式进行浅析。
List 排序指的是将 List 中的对象按某个字段进行排序的过程。
实现方式有3种思路,1使用Comparable;2使用Comparator;3使用jdk8中stream流的排序功能。
实例1:使用Comparable
public class SortTest {
public static void main(String[] args) {
// 创建并初始化 List
List<Person> list = new ArrayList<Person>() {{
add(new Person(1, 30, "北京"));
add(new Person(2, 20, "西安"));
add(new Person(3, 40, "上海"));
}};
// 使用 Comparable 自定的规则进行排序
Collections.sort(list);
// 打印 list 集合
list.forEach(p -> { System.out.println(p); });
}
}
class Person implements Comparable<Person> {
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Person p) {
return p.getAge() - this.getAge();
}
}
Comparable 是类内部的比较方法,需要自定义比较方法。
实例2:使用Comparator
public class SortTest2 {
public static void main(String[] args) {
// 创建并初始化 List
List<Person2> list = new ArrayList<Person2>() {{
add(new Person2(1, 30, "北京"));
add(new Person2(2, 20, "西安"));
add(new Person2(3, 40, "上海"));
}};
// 使用 Comparator 比较器排序
//Collections.sort(list, new PersonComparator());
// 使用匿名比较器排序
Collections.sort(list, new Comparator<Person2>() {
@Override
public int compare(Person2 p1, Person2 p2) {
return p2.getAge() - p1.getAge();
}
});
// 打印 list 集合
list.forEach(p -> { System.out.println(p); });
}
}
class Person2 {
private int id;
private int age;
private String name;
public Person2(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
class PersonComparator implements Comparator<Person2> {
@Override
public int compare(Person2 p1, Person2 p2) {
return p2.getAge() - p1.getAge();
}
}
实例3:使用stream流
public static void main(String[] args) {
// 创建并初始化 List
List<Person> list = new ArrayList<Person>() {{
add(new Person(1, 30, "北京"));
add(new Person(2, 20, "西安"));
add(new Person(3, 40, "上海"));
}};
// 使用 Stream 排序
list = list.stream().sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
//list = list.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
// 打印 list 集合
list.forEach(p -> { System.out.println(p); });
}
其中 reversed() 表示倒序的意思,如果不使用此方法则是正序。
测试结果
Person{id=3, age=40, name='上海'}
Person{id=1, age=30, name='北京'}
Person{id=2, age=20, name='西安'}
推荐使用stream流的方式,继续理解其他方式的原理。
本文介绍了在Java中对List进行排序的三种方法:使用Comparable接口、使用Comparator接口以及使用JDK 8中的Stream API。通过具体示例展示了每种方法的应用场景及其实现细节。
5439

被折叠的 条评论
为什么被折叠?



