在java中基本使用2种方法 即Comparator和Comparable接口,来完成基本的和稍微复杂的排序,当然面对不同的数据结构,如Array数组 set集合 映射map,排序的方式稍有不同
本文之定义一个Person类,自定义某一属性来对一系列Person对象进行排序
方式一通过实现Comparable接口覆写其Compare方法
/** 实现了 Comparable 接口的 Person 类,
- 每个 Person 对象都是可比较的,比较的依据是 age 属性。
- /
class Person implements Comparable{
String name; // 人名
int age; // 年龄
public Person(String n, int a){
this.name = n;
this.age = a;
}
/* 重写 Comparable 的 compareTo 方法,表示按照人的年龄来排序 /
@Override
public int compareTo(Person p2){
if(this.age > p2.age){
return 1;
}else if(this.age < p2.age){
return -1;
}else{
return 0;
}
}
/* 重写 Object 的 toString() 方法,便于打印对象 */
@Override
public String toString(){
return (“name:” + this.name + “, age:” + this.age).toString();
}
}
public class HelloWorld{
public static void main(String []args){
// 构建 Person 对象数组,包含 5 个对象
Person[] ps = new Person[5];
ps[0] = new Person(“John”, 30);
ps[1] = new Person(“Mike”, 22);
ps[2] = new Person(“Kim”, 34);
ps[3] = new Person(“Canddy”, 25);
ps[4] = new Person(“Sam”, 28);
// 利用 sort 方法对 Person 数组进行排序
Arrays.sort(ps);
// 打印 Person 数组
for(int i=0; i<ps.length; i++){
System.out.println(ps[i]);
}
}
}
方式二:当我们无法改变对象内部的代码的时候可以通过Comparator接口
public class HelloWorld{
public static void main(String []args){
// 构建 Person 对象数组,包含 5 个对象
Person[] ps = new Person[5];
ps[0] = new Person(“John”, 30);
ps[1] = new Person(“Mike”, 22);
ps[2] = new Person(“Kim”, 34);
ps[3] = new Person(“Canddy”, 25);
ps[4] = new Person(“Sam”, 28);
// 利用 sort 方法对 Person 数组进行排序
Arrays.sort(ps, new Comparator(){
/** 重写 compare 方法来对 Person 对象进行比较 */
@Override
public int compare(Person p1, Person p2){
if(p1.age > p2.age){
return 1;
}else if(p1.age < p2.age){
return -1;
}else{
return 0;
}
}
});
// 打印 Person 数组
for(int i=0; i<ps.length; i++){
System.out.println(ps[i]);
}
}
}
java8 根据对象否的某一属性进行排序
List newList = list.stream().sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
https://www.cnblogs.com/kuanglongblogs/p/11230250.html