List<WorkItem> newResult=new ArrayList<WorkItem>(); 把数据装进list集合后,如何按时间排序,取前10条
发布网友
发布时间:2022-04-22 22:52
我来回答
共5个回答
热心网友
时间:2023-10-07 06:56
你说的这个一般在数据库中使用确实比较方便,但是有时不得已在List中操作。
给你介绍两种方法。
这个关键要对时间进行排序:给你一个排序方法
/**
* 排序算法,可以调用这个方法进行倒序 、顺序
* @param list 要进行排序的 List
* @param method 要对list中的对象的那个属性的get方法进行排序 比如 时间 time get方法为getTime() 只需要传入getTime即可
* @param sort 传入字符串 是进行倒序还是逆序
* @return
*/
public void sort(List<WorkItem> list, final String method, final String sort){
Collections.sort(list, new Comparator<Object>() {
public int compare(Object a, Object b) {
int ret = 0;
try{
Method m1 = ((WorkItem)a).getClass().getMethod(method, null);
Method m2 = ((WorkItem)b).getClass().getMethod(method, null);
if(sort != null && "desc".equals(sort))//倒序
ret = m2.invoke(((WorkItem)b), null).toString().compareTo(m1.invoke(((WorkItem)a), null).toString());
else//正序
ret = m1.invoke(((WorkItem)a), null).toString().compareTo(m2.invoke(((WorkItem)b), null).toString());
}catch(NoSuchMethodException ne){
logger.error(ne.getStackTrace());
System.out.println(ne);
}catch(IllegalAccessException ie){
logger.error(ie.getStackTrace());
System.out.println(ie);
}catch(InvocationTargetException it){
logger.error(it.getStackTrace());
System.out.println(it);
}
return ret;
}
});
}
把程序里你要比较的值的类型进行修改。
类中直接引用 this.sort(......);
下面的List 就是一个有序的list了,随便你怎么取了
顺便在和你说一个很好的东西 josql ,为 Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组 你可以在google 中查找出来 官网上有些例子
可以很方便的利用 类似sql 进行List 中对象操作。
我程序中用过的,效果很不错,也简化了代码。
参考资料:http://josql.sourceforge.net/
热心网友
时间:2023-10-07 06:56
什么按时间排序呀?List就像数组一样给你先放进去的放第一个位置,然后依次给排呀!放进去后就不能排了!然后你要取,然后就挨着取,他也一定是先放进去的,先取出来那样的
热心网友
时间:2023-10-07 06:56
按时间排序? 你的意思应该是WorkItem里有个时间字段吧?
如果是的话 你在写sql语句的时候就应该做了
而不是把所有结果放在list里再排序 取前10
热心网友
时间:2023-10-07 06:57
先些个 workItem 按时间的比较方法 进行排序后去前十
热心网友
时间:2023-10-07 06:58
list没那功能 不行你就用map key存时间 value存你的对象