目录
1.使用List的sort()方法,自定义一个Compartor比较器
2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】
3.使用Collections.sort()方法【重写Comparable接口】
4.使用Collections.sort()方法【自定义Compartor比较器】
首先我们新建一个Person类,并为其设置age属性,我们后续根据该属性进行从小到大的排序。
public class Person{
public int age;
.....
此处省略get,set和toString方法方法
.....
}
之后新建测试类Test
public class Test {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person(5));
list.add(new Person(7));
list.add(new Person(4));
list.add(new Person(2));
list.add(new Person(0));
list.add(new Person(3));
list.add(new Person(1));
list.add(new Person(6));
......
排序方法往后看
......
System.out.println(list);
}
}
1.使用List的sort()方法,自定义一个Compartor比较器
public static void comp(List<Person> list){
list.sort(
new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if ((o1.getAge() - o2.getAge()) > 0) {
return 1;
}
else if ((o1.getAge() - o2.getAge()) < 0) {
return -1;
}
else {
return 0;
}
}
}
);
}
2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】
public static void lambda(List<Person> list){
list.sort(((o1,o2) -> {
//从小到大
return o1.age - o2.age;//此处定义比较规则,o2.age-o1.age即为从大到小
}));
}
3.使用Collections.sort()方法【重写Comparable接口】
注意:该方法需要元素类实现Comparable接口,并且重写compareTo方法,排序按照compareTo中的规则进行排序。
Person类
public class Person implements Comparable<Person>{
public int age;
public Person(){
}
public Person(int age){
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
---------------------------------------------------------------------------------------------
此处省略get、set和toString方法
------------------------------------------------------------------------------------------------
}
Test类中直接调用
Collections.sort(list);
4.使用Collections.sort()方法【自定义Compartor比较器】
public static void coll(List<Person> list){
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge(); //按数量从大到小排序
}
});
}
注意:比较器也可以写在元素类中
public class Person{
public int age;
public Person(){
}
public Person(int age){
this.age = age;
}
public static Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.age - o1.age;
}
};
+++++++++++++
此处省略get、set和toString方法
+++++++++++++
}
Test类中调用
Collections.sort(list,Person.compartor)
5.使用StreamAPI【推荐】
这种方式利用Stream API中的sorted()
方法,通过Comparator.comparingInt()
指定排序的字段(例如age
),并使用collect()
方法将排序后的元素收集到一个新的列表中。
public static List<Person> stream(List<Person> list){
list = list.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
return list;
}
6.结合冒泡排序暴力排序
public static void buubleSort(List<Person> list){
for (int i = 0; i < list.size(); i++) {
for(int j = 0;j<list.size() - 1;j++){
if(list.get(j).getAge() > list.get(j+1).getAge()){
Person temp = list.get(j);
list.set(j,list.get(j+1));
list.set(j+1,temp);
}
}
}
}
本人还有对优先级队列倒序排序的文章,欢迎大家观看批评指正!蟹蟹
点击传送=>完成对优先级队列倒叙排序