如何按userId升序、startDate降序排序Java Record的ArrayList?
对Java Record集合按多条件排序的解决方案
你可以直接利用Java的Comparator链式比较功能,结合Record自动生成的字段访问方法(比如userId()、startDate())来实现排序,不需要将Record改为类。
具体实现代码
假设你的集合是ArrayList<UserCourseSubscriptionRec>类型,排序代码如下:
// 方式1:使用List自带的sort方法 subscriptions.sort( Comparator.comparing(UserCourseSubscriptionRec::userId) .thenComparing(Comparator.comparing(UserCourseSubscriptionRec::startDate).reversed()) ); // 方式2:使用Collections工具类的sort方法 Collections.sort(subscriptions, Comparator.comparing(UserCourseSubscriptionRec::userId) .thenComparing(Comparator.comparing(UserCourseSubscriptionRec::startDate).reversed()) );
代码说明
Comparator.comparing(UserCourseSubscriptionRec::userId):先按userId进行升序排序(默认排序规则为升序)。.thenComparing(...):当userId相同时,执行后续的排序规则。Comparator.comparing(UserCourseSubscriptionRec::startDate).reversed():对startDate进行降序排序,通过reversed()反转默认的升序规则。
Java Record会自动为每个字段生成对应的访问方法(字段名加括号,比如userId()),因此可以直接通过方法引用来获取字段值用于比较。
内容的提问来源于stack exchange,提问作者Eric Malalel
相关产品推荐
相关产品推荐

