Android list按照时间排序的问题

刚开始按照这种写法,对list进行时间排序:


private void sortByTimeRepoList(List<ReposInfo> itemInfoList, final int which) {
    Collections.sort(itemInfoList, new Comparator<ReposInfo>() {
                @Override
                public int compare(ReposInfo item1, ReposInfo item2) {
                    Date date1 = stringToDate(Miscellaneous.longToDate(item1.getMtime() * 1000));
                    Date date2 = stringToDate(Miscellaneous.longToDate(item2.getMtime() * 1000));
            // 对日期字段进行升序,如果欲降序可采用after方法
            if (which == mainActivity.SORT_ORDER_DESCENDING ? date1.before(date2) : date1.after(date2)) {//before是指时间从最新时间下降到之前
                return 1;
            }
            return -1;
                }
            }
    );
}


这种写法的时间排序刚开始没问题(因为开始测试的数据时间都不相同),后来发现,有item的时间相同时,会报错:

java.lang.IllegalArgumentException:  Comparison method violates its general contract !


百度一番之后,大多数人都说是没有考虑  date1 == date2 这种情况,后来在stackoverflow上看到有个大神的提示:

https://stackoverflow.com/questions/10234038/compare-method-throw-exception-comparison-method-violates-its-general-contract

把代码改了一番:


private void sortByTimeRepoList(List<ReposInfo> itemInfoList, final int which) {
    Collections.sort(itemInfoList, new Comparator<ReposInfo>() {
                @Override
                public int compare(ReposInfo item1, ReposInfo item2) {
                    Date date1 = stringToDate(Miscellaneous.longToDate(item1.getMtime() * 1000));
                    Date date2 = stringToDate(Miscellaneous.longToDate(item2.getMtime() * 1000));


                    return which == mainActivity.SORT_ORDER_DESCENDING ? date2.compareTo(date1) : date1.compareTo(date2);
                }
            }
    );
}


再去测试,就OK了!

代码里的

which == mainActivity.SORT_ORDER_DESCENDING 

这一句代表的是升序或者降序,前面的date2.compareTo(date1)代表降序,后面的则是升序。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用list stream按照时间排序,可以采用以下方法之一: 方法1:使用Collections.sort和Comparator 通过创建一个自定义的Comparator,将其传递给Collections.sort方法,可以对list进行升序或降序排序。首先,确保日期格式统一化,然后使用Comparator.comparing将日期属性作为排序条件。最后,使用Collections.sort对list进行排序。 示例代码如下: ``` Collections.sort(list, Comparator.comparing(obj -> obj.getPayTime())); ``` 方法2:使用stream和sorted 通过将list转换为stream,然后使用sorted方法,可以对list进行排序。在排序之前,需要将日期字符串转换为时间戳。可以使用SimpleDateFormat来解析日期字符串,并将其转换为Date对象。然后,使用Date对象的getTime方法获取时间戳。最后,使用stream的sorted方法对list进行排序。 示例代码如下: ``` list = list.stream() .sorted((obj1, obj2) -> { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date1 = format.parse(obj1.getPayTime()); Date date2 = format.parse(obj2.getPayTime()); return date1.getTime() - date2.getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0; }) .collect(Collectors.toList()); ``` 无论选择哪种方法,都可以按照时间list进行排序。根据需求,选择合适的方法即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [AndroidList时间升序排序](https://download.csdn.net/download/woshixiaonie455/8228157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java集合List按日期升序或降序四种方法](https://blog.csdn.net/yc18329961585/article/details/118734016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值