最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面。

效果就是如下:

--group2  ---2013-08-08 10:30

  --msg1 --2013-08-08 10:30

  --msg3 --2013-08-08 10:10

--group5  ---2013-08-08 9:30

  --msgtitle --2013-08-08 9:30

  --msgtitle --2013-08-08 9:10

下面代码是对MyData数据的一个排序

public List<List<MyData>> sortList(){

        List<MyData> mList = new ArrayList<MyData>();
String[] titleKind = new String[]{"张三","李四","王五","张三","赵六",
"王五","李四","张三","李四","王五","张三"};
for(int i=0;i<titleKind.length;i++){
MyData data = new MyData();
data.setTitle(titleKind[i]);
data.setMessage(""+i);
data.setDate(new Date());
mList.add(data);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//group
List<String> titleString = new ArrayList<String>();
for(int i=0;i<mList.size();i++){
if(!titleString.contains(mList.get(i).getTitle())){
titleString.add(mList.get(i).getTitle());
}
}
//根据group的类别分类数据
List<List<MyData>> allList = new ArrayList<List<MyData>>();
for(int j=0;j<titleString.size();j++){
List<MyData> childList = new ArrayList<MyData>();
for(int k=0;k<mList.size();k++){
if(mList.get(k).getTitle().equals(titleString.get(j))){
childList.add(mList.get(k));
}
}
//对child先按时间排序,再添加到group里面
Collections.sort(childList, new Comparator<MyData>() {
/**
*
* @param lhs
* @param rhs
* @return an integer < 0 if lhs is less than rhs, 0 if they are
* equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间
*/
@Override
public int compare(MyData lhs, MyData rhs) {
Date date1 = lhs.getDate();
Date date2 = rhs.getDate();
// 对日期字段进行升序,如果欲降序可采用after方法
if (date1.before(date2)) {
return 1;
}
return -1;
}
});
allList.add(childList);
}
//group排序后的list List<MyData> temp = new ArrayList<MyData>();
for(int i=0;i<allList.size();i++)
{
for (int j=allList.size()-1 ;j>i;j--)
{
if (allList.get(i).get(0).getDate().before(allList.get(j).get(0).getDate())){
temp = allList.get(i);
allList.set(i,allList.get(j));
allList.set(j,temp);
}
}
} for(int i=0;i<allList.size();i++){
for(int j=0;j<allList.get(i).size();j++){
System.out.println(allList.get(i).get(j).getTitle()+allList.get(i).get(j).getDate().toGMTString());
}
}
   return allList;
}

下面是MyData的数据结构

    class MyData{
private String title;
private String message;
private Date date;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}

计算时间距离现在的一个方法如下

class TimeUtil {
  //时间的一个转换方法
public static Date stringToDate(String dateString) {
ParsePosition position = new ParsePosition(0);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date dateValue = simpleDateFormat.parse(dateString, position);
return dateValue;
} public static List<MyData> timeHowLong(List<MyData> list){ Collections.sort(list, new Comparator<MyData>() {
/**
*
* @param lhs
* @param rhs
* @return an integer < 0 if lhs is less than rhs, 0 if they are
* equal, and > 0 if lhs is greater than rhs,比较数据大小时,这里比的是时间
*/
@Override
public int compare(MyData lhs, MyData rhs) {
Date date1 = lhs.getDate();
Date date2 = rhs.getDate();
// 对日期字段进行升序,如果欲降序可采用after方法
if (date1.before(date2)) {
return 1;
}
return -1;
}
}); Date now = new Date(System.currentTimeMillis());
for(int i=0;i<list.size();i++){ long time = now.getTime() - list.get(i).getDate().getTime(); int day=(int)(time/(24*60*60*1000));
int hour=(int)(time/(60*60*1000)-day*24);
int min=(int)((time/(60*1000))-day*24*60-hour*60);
Log.v("InfoCenter", "day:"+day+"hour:"+hour+"min:"+min);
String formatDay= null; if((0<day)&&(day<30)){
formatDay = day+"天"+"以前";
}else if((31<day)&&(day<365)){
formatDay = (day/30)+"月"+"以前";
}else if(day>=365){
formatDay = (day/365)+"年"+"以前";
}else{
if(0<hour){
formatDay = hour+"小时"+"以前";
}else{
formatDay = min+"分"+"以前";
}
}
list.get(i).setDate(formatDay);
}
return list;
}
}

关于expanded一级二级菜单数据的分组排序的更多相关文章

  1. 巨蟒django之权限7:动态生成一级&&二级菜单

    内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...

  2. crm 动态一级二级菜单

    之前代码菜单是写是的 如何 让他 动态 生成了  首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...

  3. js分组排序算法, OrderBy

    由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2....  实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column ...

  4. Winform中GridView分组排序实现功能

    由于客户最近要扩充公司的业务,之前基于Winform+web开发混合式的系统已经不能满足他们的需求,需要从新对系统进行分区处理. 考虑到系统模块里面用到的GridView视图比较多,我就结合了DevE ...

  5. 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。

    用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...

  6. html和css实现一级菜单和二级菜单学习笔记

    实现一级菜单: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...

  7. JavaScript处理数据完成左侧二级菜单的搭建

    我们在项目中应用的后台管理框架基本上都是大同小异,左侧是一个二级菜单,点击选中的菜单,右侧对应的页面展示.我把前端页面封装数据的过程整理了一下,虽然不一定适合所有的管理页面,仅作为案例来参考,只是希望 ...

  8. CSS制作二级菜单时,二级菜单与一级菜单不对齐

    效果如图: 部分代码如图: <li><a href="#" target="_blank">关于我们</a> <ul& ...

  9. Excel——使用OFFSET、MATCH、COUNTA实现二级菜单

    如图所示,接下来提供两种办法实现: 1.将A.B.C.D定义为名称NAME. 2.设置一级菜单单元格数据有效性为NAME. 3.设置二级菜单格数据有效为: =OFFSET($A$1,MATCH($A6 ...

随机推荐

  1. 在Azure HDInsight HBase集群中使用Thrift接口

    Sun wei  Wed, Feb 25 2015 2:17 AM Apache Thrift 是一种可扩展的跨语言服务接口,可以通过内置的代码生成引擎帮助创建跨语言服务类库,Apache HBase ...

  2. 【转】java提高篇(十)-----详解匿名内部类

    原文网址:http://www.cnblogs.com/chenssy/p/3390871.html 在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节 ...

  3. android:installLocation简析

    在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...

  4. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.1

    Let $x,y,z$ be linearly independent vectors in $\scrH$. Find a necessary and sufficient condition th ...

  5. LA3942-Remember the Word(Trie)

    题意: 有s个不同的单词,给出一个长字符串把这个字符串分解成若干个单词的连接(可重复使用),有多少种分解方法 分析: dp[i]表示i开始的字符串能分解的方法数 dp[i]=sum(dp[i+len( ...

  6. UPC OJ 一道水题 STL

    Problem C: 字符串游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 10  Solved: 3 [Submit][Status][Web ...

  7. [NOI导刊2011]影像之结构化特征

    问题描述 在影像比对中,有一种方法是利用影像中的边缘(edge)资讯,计算每个边缘资讯中具有代表性的结构化特征,以作为比对两张影像是否相似的判断标准.Water-filling方法是从每个边缘图的一个 ...

  8. 解决js获取数据跨域问题,jsonP

    网上说了一些jsonp的示例,感觉都没用,最后研究了一下,调用腾讯的一个api.最后要加output=jsonp&callback=?这个,比较适用. var url = "http ...

  9. bzoj 3130 [Sdoi2013]费用流(二分,最大流)

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...

  10. Android之指南针(电子罗盘)学习

    点我下载源码 5月12日更新到V5版:http://download.csdn.net/detail/weidi1989/5364243 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不 ...