Java中List对象集合按对象中某字段进行排序举例

 更新时间:2023年07月08日 10:32:07   作者:壹猿  
这篇文章主要给大家介绍了关于Java中List对象集合按对象中某字段进行排序的相关资料,我们在日常开发中也经常会用到排序算法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

在Java中,可以使用List集合对象的sort(Comparator<? super E> c)方法,按照对象中某字段对List集合进行排序

default void sort(Comparator<? super E> c) {
    Object[] a = this.toArray();
    Arrays.sort(a, (Comparator) c);
    ListIterator<E> i = this.listIterator();
    for (Object e : a) {
        i.next();
        i.set((E) e);
    }
}

栗子:

import java.util.*;
import java.util.stream.Collectors;
public class StreamTest {
    public static void main(String[] args) {
        List<Person2> personList = new ArrayList<Person2>();
        personList.add(new Person2("Tom", 8900, 18,"male", "A"));
        personList.add(new Person2("Jack", 7000, 19,"male", "A"));
        personList.add(new Person2("Lily", 7800, 20,"female", "D"));
        personList.add(new Person2("Anni", 8200, 18,"female", "B"));
        personList.add(new Person2("Owen", 9500, 23,"male", "D"));
        personList.add(new Person2("Alisa", 7900, 28,"female", "C"));
        //根据List集合对象的sort方法(语句后x.get与y.get调换位置即为倒序)
        personList.sort((x,y) -> Integer.compare(x.getSalary(),y.getSalary()));//int类型正序
        personList.forEach(System.out::println);
        System.out.println("================================");
        personList.sort((a, b) -> a.getSalary() - b.getSalary());//int类型正序
        personList.forEach(System.out::println);
        System.out.println("================================");
        personList.sort(Comparator.comparing(Person2::getSalary));//int类型正序排序
        personList.forEach(System.out::println);
        System.out.println("================================");
        personList.sort((a,b) -> a.getLevel().compareTo(b.getLevel()));//其他类型正序
        personList.forEach(System.out::println);
        System.out.println("================================");
        //stream流的sorted方法正序排序(倒序:Comparator.comparing(Person2::getSalary).reversed())
        personList = personList.stream().sorted(Comparator.comparing(Person2::getSalary)).collect(Collectors.toList());
        personList.forEach(System.out::println);
        System.out.println("================================");
    }
}
class Person2 {
    private String name;  // 姓名
    private int salary; // 薪资
    private int age; // 年龄
    private String sex; //性别
    private String level;  // 级别
    // 构造方法
    public Person2(String name, int salary, int age, String sex, String level) {
        this.name = name;
        this.salary = salary;
        this.age = age;
        this.sex = sex;
        this.level = level;
    }
    // 省略了get和set,请自行添加
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getLevel() {
        return level;
    }
    public void setLevel(String level) {
        this.level = level;
    }
    @Override
    public String toString() {
        return "Person2{" +
                "name=" + name +
                ", salary='" + salary + '\'' +
                ", age='" + age + '\'' +
                ", sex='" + sex + '\'' +
                ", level=" + level +
                '}';
    }
}

打印输出结果如下:

Person2{name=Jack, salary='7000', age='19', sex='male', level=A}
Person2{name=Lily, salary='7800', age='20', sex='female', level=D}
Person2{name=Alisa, salary='7900', age='28', sex='female', level=C}
Person2{name=Anni, salary='8200', age='18', sex='female', level=B}
Person2{name=Tom, salary='8900', age='18', sex='male', level=A}
Person2{name=Owen, salary='9500', age='23', sex='male', level=D}
================================
Person2{name=Jack, salary='7000', age='19', sex='male', level=A}
Person2{name=Lily, salary='7800', age='20', sex='female', level=D}
Person2{name=Alisa, salary='7900', age='28', sex='female', level=C}
Person2{name=Anni, salary='8200', age='18', sex='female', level=B}
Person2{name=Tom, salary='8900', age='18', sex='male', level=A}
Person2{name=Owen, salary='9500', age='23', sex='male', level=D}
================================
Person2{name=Jack, salary='7000', age='19', sex='male', level=A}
Person2{name=Lily, salary='7800', age='20', sex='female', level=D}
Person2{name=Alisa, salary='7900', age='28', sex='female', level=C}
Person2{name=Anni, salary='8200', age='18', sex='female', level=B}
Person2{name=Tom, salary='8900', age='18', sex='male', level=A}
Person2{name=Owen, salary='9500', age='23', sex='male', level=D}
================================
Person2{name=Jack, salary='7000', age='19', sex='male', level=A}
Person2{name=Tom, salary='8900', age='18', sex='male', level=A}
Person2{name=Anni, salary='8200', age='18', sex='female', level=B}
Person2{name=Alisa, salary='7900', age='28', sex='female', level=C}
Person2{name=Lily, salary='7800', age='20', sex='female', level=D}
Person2{name=Owen, salary='9500', age='23', sex='male', level=D}
================================
Person2{name=Jack, salary='7000', age='19', sex='male', level=A}
Person2{name=Lily, salary='7800', age='20', sex='female', level=D}
Person2{name=Alisa, salary='7900', age='28', sex='female', level=C}
Person2{name=Anni, salary='8200', age='18', sex='female', level=B}
Person2{name=Tom, salary='8900', age='18', sex='male', level=A}
Person2{name=Owen, salary='9500', age='23', sex='male', level=D}
================================

总结

到此这篇关于Java中List对象集合按对象中某字段进行排序的文章就介绍到这了,更多相关Java中List对象集合排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用SSE进行实时通知前端的实现代码

    SpringBoot使用SSE进行实时通知前端的实现代码

    这篇文章主要介绍了SpringBoot使用SSE进行实时通知前端,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Maven build 命令介绍的使用详解

    Maven build 命令介绍的使用详解

    这篇文章主要介绍了Maven build 命令介绍的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • MyBatis中的N+1问题的解决方法

    MyBatis中的N+1问题的解决方法

    本文主要介绍了MyBatis中的N+1问题的四种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Springboot的maven间接依赖的实现

    Springboot的maven间接依赖的实现

    这篇文章主要介绍了Springboot的maven间接依赖的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java开发之HashMap的使用和遍历

    Java开发之HashMap的使用和遍历

    这篇文章主要介绍了Java开发之HashMap的使用和遍历的相关资料,这里提供一个HashMap的简单实例并结合List使用,需要的朋友可以参考下
    2017-08-08
  • java合并list方法代码实例

    java合并list方法代码实例

    这篇文章主要介绍了java合并list方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法

    IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法

    这篇文章主要介绍了IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Eureka源码解析服务离线状态变更

    Eureka源码解析服务离线状态变更

    这篇文章主要为大家介绍了Eureka源码解析服务离线的状态变更示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java实现冒泡排序简单示例

    Java实现冒泡排序简单示例

    冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,下面这篇文章主要给大家介绍了关于Java实现冒泡排序的相关资料,需要的朋友可以参考下
    2023-06-06
  • SpringMVC框架如何与Junit整合看这个就够了

    SpringMVC框架如何与Junit整合看这个就够了

    这篇文章主要介绍了SpringMVC框架如何与Junit整合看这个就够了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05

最新评论