jdk1.8 List排序

List<User> users=new ArrayList<User>();

组合排序 先按name排序,name相同的按age排序

Collections.sort(users,Comparator.comparing(User::getName).thenComparing(User::getAge));

降序

Collections.sort(users, Comparator.comparing(User::getUserId).reversed());

升序

users.sort((x,y)->x.getUserId().compareTo(y.getUserId()));

 

### JDK 1.8 中实现分组和排序功能 在 JDK 1.8 中,`Stream API` 提供了一种强大的工具来处理集合数据。通过 `Collectors.groupingBy` 和 `Collectors.collectingAndThen` 方法可以轻松实现分组操作,而排序可以通过 `Comparator` 来完成。 #### 分组与排序的组合实现 以下是使用 `Stream API` 进行分组并按特定字段排序的一个示例: ```java import java.util.*; import java.util.stream.Collectors; class Transaction { private String type; private int value; public Transaction(String type, int value) { this.type = type; this.value = value; } public String getType() { return type; } public int getValue() { return value; } } public class Main { public static void main(String[] args) { List<Transaction> transactions = Arrays.asList( new Transaction("GROCERY", 10), new Transaction("ENTERTAINMENT", 20), new Transaction("GROCERY", 30), new Transaction("ENTERTAINMENT", 40) ); Map<String, List<Integer>> groupedTransactions = transactions.stream() .collect(Collectors.groupingBy( Transaction::getType, Collectors.mapping(Transaction::getValue, Collectors.toList()) )); System.out.println("Grouped Transactions Before Sorting: " + groupedTransactions); Map<String, List<Integer>> sortedGroupedTransactions = transactions.stream() .collect(Collectors.groupingBy( Transaction::getType, Collectors.collectingAndThen( Collectors.mapping(Transaction::getValue, Collectors.toList()), list -> list.stream().sorted(Comparator.reverseOrder()).toList() ) )); System.out.println("Sorted Grouped Transactions: " + sortedGroupedTransactions); } } ``` 上述代码展示了如何利用 `groupingBy` 对交易记录按照类型 (`type`) 进行分组,并对每组中的数值 (`value`) 按照降序排列[^1]。 #### 关键点解析 - **分组**:`Collectors.groupingBy(classifier)` 是用于将流中的元素根据指定的标准分类到不同的桶中。 - **映射**:`Collectors.mapping(mapper, downstream)` 将每个输入元素转换为另一种形式后再收集。 - **排序**:对于列表类型的下游收集器,可以直接在其基础上应用 `stream()` 并调用 `sorted()` 函数进行排序[^2]。 此方法不仅能够满足基本需求,还具有良好的可扩展性和灵活性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值