JDK 8 List 装对象排序

本文介绍如何使用Lambda表达式对未实现Comparable接口的Student类进行升序和降序排序。通过具体的代码示例展示了如何利用Lambda表达式来定义比较器,并应用到List集合的排序中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如一个类Student 没有实现  Comparable 接口时,使用Lambda表达式对集合直接排序。

 List<Student>  list = new ArrayList<Student>(

     new Student("id",12),

   new Student('Iid",13)

);

list.sort((Student s1, Student s2) -> s1.getId().compareTo(s2.getId()));

上面是顺序排序,

下面这个是倒序排序

 Comparator<Student> comparator = (Student s1,Student s2) -> s1.getId().compareTo(s2.getId());
list.sort(comparator.reversed());





JDK8 中,使用 `List` 排序可以通过多种方式实现,主要包括传统的 `Collections.sort()` 方法、Lambda 表达式以及 `Comparator` 提供的静态方法。以下是一些常见的排序方法示例: ### 1. 使用 Lambda 表达式进行升序排序 可以使用 `List.sort()` 方法结合 Lambda 表达式来对 `List` 进行升序排序。例如,假设有一个 `User` 类,并且希望根据 `age` 字段进行排序[^1]。 ```java // 不带参数 list.sort((u1, u2) -> u1.getAge().compareTo(u2.getAge())); // 带参数 list.sort((User u1, User u2) -> u1.getAge().compareTo(u2.getAge())); ``` ### 2. 使用 Comparator 静态方法进行升序和降序排序 `Comparator.comparing()` 方法提供了更简洁的方式来进行排序。如果需要降序排序,可以使用 `.reversed()` 方法。 ```java // 升序排序 Collections.sort(list, Comparator.comparing(User::getAge)); // 降序排序 Collections.sort(list, Comparator.comparing(User::getAge).reversed()); ``` ### 3. 使用 Stream API 对 List 进行排序 通过 `Stream` 的 `sorted()` 方法结合 `Comparator` 可以对 `List` 进行排序,并将结果收集到新的列表中[^3]。 ```java List<Student> sortedList = list.stream() .sorted(Comparator.comparing(Student::getAge).reversed()) .collect(Collectors.toList()); ``` ### 4. 对整数类型的 List 进行排序 对于 `List<Integer>` 类型的列表,可以直接使用 Lambda 表达式进行排序。以下是一个正排序(升序)和反排序(降序)的示例[^2]。 ```java // 正排序(升序) list.sort((a, b) -> a - b); // 反排序(降序) list.sort((a, b) -> b - a); ``` ### 5. 使用传统方式排序JDK8 之前) 在 JDK8 之前,通常会使用 `Collections.sort()` 方法并传入一个自定义的 `Comparator` 来进行排序[^1]。 ```java Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge().compareTo(o2.getAge()); } }); ``` 以上方法可以根据具体需求选择适合的排序方式。无论是简单数据类型还是复杂对象,都可以通过这些方法实现排序操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值