list数据重排序

在项目中我们难免要遇到需要将list的数据重新排序的问题。这里做一个笔记,方便自己以后使用,如果网友有更好地方法希望可以赐教

按类型分类

一个频道list,其中分为新增的,订阅的,普通的。频道有个更新时间。

排序要求:新增的 -> 订阅的 -> 普通的。且每一种里面都要根据更新时间排序

思路:

获取到全部频道(无序的)

for遍历一遍,遍历时将频道分类,分别存入一个新的list里面。

得到三个list newChannelList subChannelList normalChannelList

然后分别按照时间排序。

private List sortChannel(List channelList) {
List sortChannelList = new ArrayList<>();
List newChannelList = new ArrayList<>();
List subChannelList = new ArrayList<>();
List normalChannelList = new ArrayList<>();

    for (Channel c : channelList) {
        if (null != c.getIsSub() && c.getIsSub()) {  //如果是已订阅则认为不为新增频道
            c.setIsNew(false);
        }

        if (null != c.getIsNew() && c.getIsNew()) {
            newChannelList.add(c);
        } else if (null != c.getIsSub() && c.getIsSub()) {
            subChannelList.add(c);
        } else {
            normalChannelList.add(c);
        }

    }
    Collections.sort(newChannelList, comparator);
    Collections.sort(subChannelList, comparator);
    Collections.sort(normalChannelList, comparator);

    if (!newChannelList.isEmpty()) sortChannelList.addAll(newChannelList);
    if (!subChannelList.isEmpty()) sortChannelList.addAll(subChannelList);
    if (!normalChannelList.isEmpty()) sortChannelList.addAll(normalChannelList);

    return sortChannelList;
}

Comparator comparator = new Comparator<Channel>() {

    @Override
    public int compare(Channel c1, Channel c2) {
        if (stringToLong(c1.getUpdateTime()) > stringToLong(c2.getUpdateTime())) {

            return -1;
        }
        if (stringToLong(c1.getUpdateTime()) == stringToLong(c2.getUpdateTime())) {
            return 0;
        }
        return 1;
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值