当前位置:   article > 正文

【集合排序】List根据对象某一字段排序的六种方法_list根据某个字段排序

list根据某个字段排序

目录

1.使用List的sort()方法,自定义一个Compartor比较器

2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】

3.使用Collections.sort()方法【重写Comparable接口】

4.使用Collections.sort()方法【自定义Compartor比较器】

5.使用StreamAPI【推荐】

6.结合冒泡排序暴力排序


首先我们新建一个Person类,并为其设置age属性,我们后续根据该属性进行从小到大的排序。

  1. public class Person{
  2. public int age;
  3. .....
  4. 此处省略getset和toString方法方法
  5. .....
  6. }

之后新建测试类Test

  1. public class Test {
  2. public static void main(String[] args) {
  3. List<Person> list = new ArrayList<>();
  4. list.add(new Person(5));
  5. list.add(new Person(7));
  6. list.add(new Person(4));
  7. list.add(new Person(2));
  8. list.add(new Person(0));
  9. list.add(new Person(3));
  10. list.add(new Person(1));
  11. list.add(new Person(6));
  12. ......
  13. 排序方法往后看
  14. ......
  15. System.out.println(list);
  16. }
  17. }

1.使用List的sort()方法,自定义一个Compartor比较器

  1. public static void comp(List<Person> list){
  2. list.sort(
  3. new Comparator<Person>() {
  4. @Override
  5. public int compare(Person o1, Person o2) {
  6. if ((o1.getAge() - o2.getAge()) > 0) {
  7. return 1;
  8. }
  9. else if ((o1.getAge() - o2.getAge()) < 0) {
  10. return -1;
  11. }
  12. else {
  13. return 0;
  14. }
  15. }
  16. }
  17. );
  18. }

2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】

  1. public static void lambda(List<Person> list){
  2. list.sort(((o1,o2) -> {
  3. //从小到大
  4. return o1.age - o2.age;//此处定义比较规则,o2.age-o1.age即为从大到小
  5. }));
  6. }

3.使用Collections.sort()方法【重写Comparable接口

注意:该方法需要元素类实现Comparable接口,并且重写compareTo方法,排序按照compareTo中的规则进行排序。

Person类

  1. public class Person implements Comparable<Person>{
  2. public int age;
  3. public Person(){
  4. }
  5. public Person(int age){
  6. this.age = age;
  7. }
  8. @Override
  9. public int compareTo(Person o) {
  10. return this.age - o.age;
  11. }
  12. ———————————————————————————————
  13. 此处省略getset和toString方法
  14. ————————————————————————————————
  15. }

Test类中直接调用

Collections.sort(list);

4.使用Collections.sort()方法【自定义Compartor比较器】

  1. public static void coll(List<Person> list){
  2. Collections.sort(list, new Comparator<Person>() {
  3. @Override
  4. public int compare(Person o1, Person o2) {
  5. return o1.getAge() - o2.getAge(); //按数量从大到小排序
  6. }
  7. });
  8. }

注意:比较器也可以写在元素类中

  1. public class Person{
  2. public int age;
  3. public Person(){
  4. }
  5. public Person(int age){
  6. this.age = age;
  7. }
  8. public static Comparator<Person> comparator = new Comparator<Person>() {
  9. @Override
  10. public int compare(Person o1, Person o2) {
  11. return o2.age - o1.age;
  12. }
  13. };
  14. +++++++++++++
  15. 此处省略getset和toString方法
  16. +++++++++++++
  17. }

Test类中调用

Collections.sort(list,Person.compartor)

5.使用StreamAPI【推荐】

这种方式利用Stream API中的sorted()方法,通过Comparator.comparingInt()指定排序的字段(例如age),并使用collect()方法将排序后的元素收集到一个新的列表中。

  1. public static List<Person> stream(List<Person> list){
  2. list = list.stream()
  3. .sorted(Comparator.comparing(Person::getAge))
  4. .collect(Collectors.toList());
  5. return list;
  6. }

6.结合冒泡排序暴力排序

  1. public static void buubleSort(List<Person> list){
  2. for (int i = 0; i < list.size(); i++) {
  3. for(int j = 0;j<list.size() - 1;j++){
  4. if(list.get(j).getAge() > list.get(j+1).getAge()){
  5. Person temp = list.get(j);
  6. list.set(j,list.get(j+1));
  7. list.set(j+1,temp);
  8. }
  9. }
  10. }
  11. }

本人还有对优先级队列倒序排序的文章,欢迎大家观看批评指正!蟹蟹
点击传送=>完成对优先级队列倒叙排序

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/440142
推荐阅读
相关标签
  

闽ICP备14008679号