(java、android) list排序
写此博文以便翻阅及帮助他人:
排序规则:已置顶的数据按照置顶顺序(编号)进行排序并置于顶部,正常的数据需区分每一天(如17号有N条、16号有N条、15号有N条…)的数据并按照阅读量进行排序后再对日期(17号、16号、15号…)进行倒序排序。
- 实体类:
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;
}
}
}
- json数据解析不再叙述
- 排序;
/**
*
* @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;
}
本人小白,以上内容仅供参考欢迎大佬指点!
来源:CSDN
作者:山海余生都是你
链接:https://blog.csdn.net/qq_38040638/article/details/103585204