最新再弄关于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. mac tree命令

    mac下默认是没有 tree命令的,不过我们可以使用find命令模拟出tree命令的效果,如显示当前目录的 tree 的命令: $ find . -print | sed -e 's;[^/]*/;| ...

  2. 宏HASH_DELETE

    HASH_DELETE(buf_page_t, hash, buf_pool->page_hash, fold, bpage); NAME 可理解为 void* next /********** ...

  3. C# 向共享文件夹上传及下载文件

    //第一步建立共享链接 public static bool connectState(string path, string userName, string passWord) { bool Fl ...

  4. windows远程桌面3389超时锁定时间调整方法(取消锁屏时间限制)

    我们在管理服务器操作时,有时候需要长时间操作服务器,有时候稍微离开下倒杯水或接个稍长点的电话,就超时断开了很烦啦!有没有方法解决这个问题类?答案是有的!我只要在组策略里面,稍微修改下超时时间就可以了. ...

  5. Can not perform pod install under el capitan (15A279b)

    这个问题在stackoverflow上面有过讨论: Can not perform pod install under el capitan (15A279b) 被采纳的答案为:sudo gem in ...

  6. Android开发优化宝典

    I. 网络相关 http头信息带Cache-Control域 确定缓存过期时间 防止重复请求 直接用IP直连,不用域名,策略性跟新本地IP列表. – DNS解析过程耗时在百毫秒左右,并且还有可能存在D ...

  7. Spring AOP--返回通知,异常通知和环绕通知

    在上篇文章中学习了Spring AOP,并学习了前置通知和后置通知.地址为:http://www.cnblogs.com/dreamfree/p/4095858.html 在本文中,将继续上篇的学习, ...

  8. C#实现无物理边距真正可打印区域的绘图\打印程序开发

    经常在开发实际的应用程序中,需要用到图形绘制和打印程序.如何实现完整的精确打印和绘图是需要注意许多细节地方的.最近在遇到打印问题的时候,仔细研究一阵,总结这篇博文,写得有点杂乱,看文要还请费点神. 基 ...

  9. JMX学习一

    JMX        即 Java Management Extensions   Java管理扩展MBean   即 managed beans                         被管 ...

  10. HDU 1520-Anniversary party(树形dp入门)

    题意: n个人参加party,已知每人的欢乐值,给出n个人的工作关系树,一个人和他的顶头上司不能同时参加,party达到的最大欢乐值. 分析:dp[i][f],以i为根的子树,f=0,i不参加,f=1 ...