Kotlin中如何实现从今日起的日期列表自定义排序
问题原因
你当前的实现仅基于「日期是否晚于当前时间」这单个布尔条件排序,只能保证未来日期整体排在过去日期之前,无法处理同组内(未来/过去)的时间先后顺序,因此达不到预期效果。
另外你代码中millis.toInt()的操作存在严重问题:毫秒级时间戳数值远大于Int类型的取值上限,会发生数值溢出,直接导致比较结果错误,不需要转Int,直接用原始Long类型的时间戳比较即可。
正确实现(Kotlin)
你可以使用sortedWith结合多条件排序实现需求,优先按「是否为未来日期」降序排列,再按时间戳升序排列同组日期:
val currentMillis = currentDateTimeUTC.millis val sortedDates = dates.sortedWith( // 第一优先级:未来日期排前面 compareByDescending { it.toFormattedFullDateFullTime.millis > currentMillis } // 第二优先级:同组内按时间先后升序排列 .thenBy { it.toFormattedFullDateFullTime.millis } )
如果需要调整过去日期的内部排序规则,比如让更近的过去日期排在更前面,把第二排序规则改为thenByDescending即可。
排序效果验证
用你给出的测试数据排序后,输出结果和你预期完全一致:
2022-05-11T22:59:59Z 2022-05-28T22:59:59Z 2022-06-21T22:59:59Z 2022-06-31T22:59:59Z 2022-11-30T23:59:59Z 2021-05-31T22:59:59Z
内容的提问来源于stack exchange,提问作者MARSH
相关产品推荐
相关产品推荐

