最新再弄关于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. git commit 之后 push 之前,想删除 个别的commit 文件

    git rm --cached <file_name> git commit "删除了<file_name>文件" git rm --cached < ...

  2. 对于requirejs AMD模块加载的理解

    个人人为使用模块化加载的优点有三: 1,以我的项目为例:90%为图表展示,使用的是echarts,此文件较大,requirejs可以在同一个版本号(urlArgs)之下缓存文件,那么我就可以在访问登陆 ...

  3. UVa 1606 (极角排序) Amphiphilic Carbon Molecules

    如果,没有紫书上的翻译的话,我觉得我可能读不懂这道题.=_=|| 题意: 平面上有n个点,不是白点就是黑点.现在要放一条直线,使得直线一侧的白点与另一侧的黑点加起来数目最多.直线上的点可以看作位于直线 ...

  4. HNOI2008 GT 考试

    我不明白为什么是DP,我感觉和vijos的核电站问题(https://www.vijos.org/p/1232)差不多啊 这是别人的题解:http://www.cnblogs.com/Skywalke ...

  5. Linux中的设备文件与设备号

    设备文件与设备号   在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号.主设备号用来区分不同类型的设备,而次设备号用来区分同一类 ...

  6. Python 连接mysql

    下面我们使用MySQLdb 实现连接mysql 数据库并进行操作. #!/usr/bin/env python # -*-coding:UTF-8-*- import MySQLdb def conn ...

  7. 【暑假】[实用数据结构]UVa11997 K Smallest Sums

    UVa11997 K Smallest Sums  题目: K Smallest Sums You're given k arrays, each array has k integers. Ther ...

  8. AJAX— 异步传输

    AJAX异步传输 AJAX— 异步传输 AJAX浏览器与服务器异步传输数据,通过异步请求大大减少数据信息访问量,通俗:AJAX对局部刷新而不是对整个页面刷新,AJAX使得程序更快,更友好. AJAX处 ...

  9. n & (n-1)

    n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子: n = 10100(二进制),则(n-1) = 10011 ==>n&(n-1) = 10000 ...

  10. JDBC 的基本步骤

    JDBC 的基本步骤: 一.导入mysql-connector-java-x.x.x-bin.jar后: 二.代码 1. 注册驱动(三种方式)2. 创建一个连接对象(三种方式) 3. 创建一个sql语 ...