关于expanded一级二级菜单数据的分组排序
最新再弄关于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一级二级菜单数据的分组排序的更多相关文章
- 巨蟒django之权限7:动态生成一级&&二级菜单
内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...
- crm 动态一级二级菜单
之前代码菜单是写是的 如何 让他 动态 生成了 首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...
- js分组排序算法, OrderBy
由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2.... 实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column ...
- Winform中GridView分组排序实现功能
由于客户最近要扩充公司的业务,之前基于Winform+web开发混合式的系统已经不能满足他们的需求,需要从新对系统进行分区处理. 考虑到系统模块里面用到的GridView视图比较多,我就结合了DevE ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- html和css实现一级菜单和二级菜单学习笔记
实现一级菜单: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...
- JavaScript处理数据完成左侧二级菜单的搭建
我们在项目中应用的后台管理框架基本上都是大同小异,左侧是一个二级菜单,点击选中的菜单,右侧对应的页面展示.我把前端页面封装数据的过程整理了一下,虽然不一定适合所有的管理页面,仅作为案例来参考,只是希望 ...
- CSS制作二级菜单时,二级菜单与一级菜单不对齐
效果如图: 部分代码如图: <li><a href="#" target="_blank">关于我们</a> <ul& ...
- Excel——使用OFFSET、MATCH、COUNTA实现二级菜单
如图所示,接下来提供两种办法实现: 1.将A.B.C.D定义为名称NAME. 2.设置一级菜单单元格数据有效性为NAME. 3.设置二级菜单格数据有效为: =OFFSET($A$1,MATCH($A6 ...
随机推荐
- 在Azure HDInsight HBase集群中使用Thrift接口
Sun wei Wed, Feb 25 2015 2:17 AM Apache Thrift 是一种可扩展的跨语言服务接口,可以通过内置的代码生成引擎帮助创建跨语言服务类库,Apache HBase ...
- 【转】java提高篇(十)-----详解匿名内部类
原文网址:http://www.cnblogs.com/chenssy/p/3390871.html 在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节 ...
- android:installLocation简析
在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...
- [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 ...
- LA3942-Remember the Word(Trie)
题意: 有s个不同的单词,给出一个长字符串把这个字符串分解成若干个单词的连接(可重复使用),有多少种分解方法 分析: dp[i]表示i开始的字符串能分解的方法数 dp[i]=sum(dp[i+len( ...
- UPC OJ 一道水题 STL
Problem C: 字符串游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 10 Solved: 3 [Submit][Status][Web ...
- [NOI导刊2011]影像之结构化特征
问题描述 在影像比对中,有一种方法是利用影像中的边缘(edge)资讯,计算每个边缘资讯中具有代表性的结构化特征,以作为比对两张影像是否相似的判断标准.Water-filling方法是从每个边缘图的一个 ...
- 解决js获取数据跨域问题,jsonP
网上说了一些jsonp的示例,感觉都没用,最后研究了一下,调用腾讯的一个api.最后要加output=jsonp&callback=?这个,比较适用. var url = "http ...
- bzoj 3130 [Sdoi2013]费用流(二分,最大流)
Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...
- Android之指南针(电子罗盘)学习
点我下载源码 5月12日更新到V5版:http://download.csdn.net/detail/weidi1989/5364243 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不 ...