关于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 ...
随机推荐
- git commit 之后 push 之前,想删除 个别的commit 文件
git rm --cached <file_name> git commit "删除了<file_name>文件" git rm --cached < ...
- 对于requirejs AMD模块加载的理解
个人人为使用模块化加载的优点有三: 1,以我的项目为例:90%为图表展示,使用的是echarts,此文件较大,requirejs可以在同一个版本号(urlArgs)之下缓存文件,那么我就可以在访问登陆 ...
- UVa 1606 (极角排序) Amphiphilic Carbon Molecules
如果,没有紫书上的翻译的话,我觉得我可能读不懂这道题.=_=|| 题意: 平面上有n个点,不是白点就是黑点.现在要放一条直线,使得直线一侧的白点与另一侧的黑点加起来数目最多.直线上的点可以看作位于直线 ...
- HNOI2008 GT 考试
我不明白为什么是DP,我感觉和vijos的核电站问题(https://www.vijos.org/p/1232)差不多啊 这是别人的题解:http://www.cnblogs.com/Skywalke ...
- Linux中的设备文件与设备号
设备文件与设备号 在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号.主设备号用来区分不同类型的设备,而次设备号用来区分同一类 ...
- Python 连接mysql
下面我们使用MySQLdb 实现连接mysql 数据库并进行操作. #!/usr/bin/env python # -*-coding:UTF-8-*- import MySQLdb def conn ...
- 【暑假】[实用数据结构]UVa11997 K Smallest Sums
UVa11997 K Smallest Sums 题目: K Smallest Sums You're given k arrays, each array has k integers. Ther ...
- AJAX— 异步传输
AJAX异步传输 AJAX— 异步传输 AJAX浏览器与服务器异步传输数据,通过异步请求大大减少数据信息访问量,通俗:AJAX对局部刷新而不是对整个页面刷新,AJAX使得程序更快,更友好. AJAX处 ...
- n & (n-1)
n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子: n = 10100(二进制),则(n-1) = 10011 ==>n&(n-1) = 10000 ...
- JDBC 的基本步骤
JDBC 的基本步骤: 一.导入mysql-connector-java-x.x.x-bin.jar后: 二.代码 1. 注册驱动(三种方式)2. 创建一个连接对象(三种方式) 3. 创建一个sql语 ...