Java:List集合内的对象进行排序
List集合中的对象进行排序,除了for外,还有java的Collections对象来对摸个集合进行排序的用法。
比如说我有一个List集合,集合元素为:
public class TaskAutoExecutePlan{ private String id = null; private AutoExecutePlanType autoExecutePlanType; private TaskStatus taskStatus; private String parameters; private Date createDate; private Date completeDate; private Date modifyDate; /**get set 方法*/ } public enum AutoExecutePlanType { ImportSiteCellParameter(2), WIFI(32); /*构造函数等*/ }
如果我需要先按照AutoExecutePlanType进行升序排序,在对CreateDate进行升序排序,使用Collections.sort()该怎么实现呢?
1 public static void main(String[] args) { 2 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 3 Date now = new Date(); 4 List<TaskAutoExecutePlan> items = new ArrayList<>(); 5 6 try { 7 Thread.sleep(10000); 8 } catch (InterruptedException e) { 9 e.printStackTrace(); 10 } 11 12 TaskAutoExecutePlan plan = new TaskAutoExecutePlan(); 13 plan.setId(UUID.randomUUID().toString()); 14 plan.setCreateDate(new Date()); 15 plan.setAutoExecutePlanType(AutoExecutePlanType.ImportSiteCellParameter); 16 items.add(plan); 17 18 19 plan = new TaskAutoExecutePlan(); 20 plan.setId(UUID.randomUUID().toString()); 21 plan.setCreateDate(now); 22 plan.setAutoExecutePlanType(AutoExecutePlanType.ImportSiteCellParameter); 23 items.add(plan); 24 25 plan = new TaskAutoExecutePlan(); 26 plan.setId(UUID.randomUUID().toString()); 27 plan.setCreateDate(now); 28 plan.setAutoExecutePlanType(AutoExecutePlanType.WIFI); 29 items.add(plan); 30 31 plan = new TaskAutoExecutePlan(); 32 plan.setId(UUID.randomUUID().toString()); 33 plan.setCreateDate(new Date()); 34 plan.setAutoExecutePlanType(AutoExecutePlanType.WIFI); 35 items.add(plan); 36 37 System.out.println("before sort:"); 38 for (TaskAutoExecutePlan item : items) { 39 System.out.println(item.getId() + ":" + item.getAutoExecutePlanType() + ":" + format.format(item.getCreateDate())); 40 } 41 42 Collections.sort(items, new Comparator<TaskAutoExecutePlan>() { 43 @Override 44 public int compare(TaskAutoExecutePlan o1, TaskAutoExecutePlan o2) { 45 int i = o1.getAutoExecutePlanType().getValue() - o2.getAutoExecutePlanType().getValue(); 46 if (i == 0) { 47 if (o1.getCreateDate().equals(o2.getCreateDate())) { 48 return 0; 49 } else if (o1.getCreateDate().after(o2.getCreateDate())) { 50 return 1; 51 } else { 52 return -1; 53 } 54 } 55 return i; 56 } 57 }); 58 59 System.out.println("after sort:"); 60 for (TaskAutoExecutePlan item : items) { 61 System.out.println(item.getId() + ":" + item.getAutoExecutePlanType() + ":" + format.format(item.getCreateDate())); 62 } 63 }
输出结果:
before sort:
252409be-1bb2-4502-8796-167b43d8de92:ImportSiteCellParameter:2017-02-27 19:36:11.000320
fd7dc92b-b0f4-423a-8644-d95ea0bc6cab:ImportSiteCellParameter:2017-02-27 19:36:00.000294
42bc8d28-90c4-4563-83a3-215c38bc0f9e:WIFI:2017-02-27 19:36:00.000294
d25d4201-f776-4b5f-bf33-8b1f8b80c412:WIFI:2017-02-27 19:36:11.000327
after sort:
fd7dc92b-b0f4-423a-8644-d95ea0bc6cab:ImportSiteCellParameter:2017-02-27 19:36:00.000294
252409be-1bb2-4502-8796-167b43d8de92:ImportSiteCellParameter:2017-02-27 19:36:11.000320
42bc8d28-90c4-4563-83a3-215c38bc0f9e:WIFI:2017-02-27 19:36:00.000294
d25d4201-f776-4b5f-bf33-8b1f8b80c412:WIFI:2017-02-27 19:36:11.000327
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版
2016-02-27 Java Servlet(一):创建工程(jdk7+tomcat7+eclipse)