list排序

放肆的年华 提交于 2019-12-18 00:28:11

(java、android) list排序

写此博文以便翻阅及帮助他人:

排序规则:已置顶的数据按照置顶顺序(编号)进行排序并置于顶部,正常的数据需区分每一天(如17号有N条、16号有N条、15号有N条…)的数据并按照阅读量进行排序后再对日期(17号、16号、15号…)进行倒序排序。

  1. 实体类:
public class DynamicEntity implements Serializable,Comparable<DynamicEntity> {
    public static final int DYNAMIC_FOLLOW_DATE = 1;//时间
    public static final int DYNAMIC_FOLLOW_TOP = 2;//置顶编号
    public static final int DYNAMIC_FOLLOW_BROWSE = 3;//浏览量
    
    private String title;//标题
    private String content;//描述
    private int readCount;//浏览次数
    private long created_at;//发布时间
    private Integer userId;
    private String username;
    private int topNumber;//置顶编号
    private int follow = DYNAMIC_FOLLOW_DATE;

    @Override
    public int compareTo(DynamicEntity o) {
        if (this.follow == DYNAMIC_FOLLOW_TOP){
            return this.topNumber > o.topNumber ? - 1 : 1;
        }else if (this.follow == DYNAMIC_FOLLOW_BROWSE){
            return this.readCount > o.readCount ? - 1 : 1;
        }else {
            return this.created_at > o.created_at ? - 1 : 1;
        }
    }
}
  1. json数据解析不再叙述
  2. 排序;
/**
     *
     * @param list
     * @return
     */
    private List<DynamicEntity> sortList(List<DynamicEntity> list){
        if (list == null){
            return null;
        }
        /*创建一个列表保存已置顶数据并删除*/
        List<DynamicEntity> topList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).isTop()){
                list.get(i).setFollow(DYNAMIC_FOLLOW_TOP);//设置排序类型
                topList.add(list.get(i));
                list.remove(i);
                i--;
            }
        }
        /*先进行正常数据排序*/
        if (list.size() != 0){
            list = map(list);
        }
        /*不为空时*/
        if (topList.size() != 0){
            /*排序*/
            Collections.sort(topList);
            for (DynamicEntity bean:topList) {
                list.add(0,bean);
            }
            topList.clear();
        }
        return list;
    }
 /**
     *
     * @param list
     */
    private List<DynamicEntity> map(List<DynamicEntity> list){
        /**/
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        /*获取发布日期及每天数据量*/
        Map<String,Integer> map = new HashMap<>();
        for(DynamicEntity bean:list){
            String str = simpleDateFormat.format(new Date(bean.getCreated_at()*1000));//时间戳转换
            Integer i = 1;
            if(map.get(str) != null){
                i = map.get(str)+1;
            }
            map.put(str,i);
        }
        /*创建TreeMap实现倒序排序*/
        Map<String,Object> objectMap = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.parseInt(o1) > Integer.parseInt(o2) ? -1 : 1;
            }
        });
        /*获取第一步保存的键并循环列表、同一天的数据归入一个列表*/
        for (String str : map.keySet()) {
            List<DynamicEntity> beanList = new ArrayList<>();
            for (DynamicEntity bean : list) {
                String time = simpleDateFormat.format(new Date(bean.getCreated_at()*1000));
                if (TextUtils.equals(str,time)){
                    beanList.add(bean);
                }
            }
            /*对列表进行阅读量排序*/
            Collections.sort(beanList);//此处需设置排序类型为DYNAMIC_FOLLOW_BROWSE
            objectMap.put(str,beanList);
        }
        /**/
        List<DynamicEntity> dynamicEntities = new ArrayList<>();
        for (Map.Entry<String, Object> entry:objectMap.entrySet()) {
            List<DynamicEntity> beanList = (List<DynamicEntity>) entry.getValue();
            for (DynamicEntity bean : beanList) {
                dynamicEntities.add(bean);
            }
        }
        return dynamicEntities;
    }

本人小白,以上内容仅供参考欢迎大佬指点!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!