Java – 按时间排序数组
第一:我使用数组来获取这样的信息:
// Tuesday array[2][1] = "tuesday"; array[2][2] = "20:00"; // Wednesday array[3][1] = "Wednesday"; array[3][2] = "15:00"; // Thursday array[4][1] = "Thursday"; array[4][2] = "20:00"; // Friday array[5][1] = "Friday"; array[5][2] = "18:00"; // Saturday array[6][1] = "Saturday"; array[6][2] = "15:00"; // Sunday array[7][1] = "Sunday"; array[7][2] = "15:00"; 如何按实际时间和工作日对数组进行排序? 非常感谢你. 解决方法
这里的其他答案很好,但使用过时的类.
java.time 在Java 8及更高版本中,我们现在内置了java.time框架(带有Java 6& 7和Android的后端口).与旧的日期时间类相比有了很大的改进. java.time类包含一对符合您确切需求的类: > 预先定义了这些类型,您甚至不需要像其他注释和答案所建议的那样定义自己的类.至少如果您对日期排序的定义在周一至周日进行. DayOfWeek枚举按此顺序预定了几周的天数.如果你的更大的项目有意义,你可以组建DayOfWeek和LocalTime自己的类. Java enums非常方便,灵活,功能强大(所以learn more如果他们对你不熟悉的话).枚举有自己的特殊实现 EnumMap<DayOfWeek,LocalTime> dayToTimeMap = new EnumMap<> ( DayOfWeek.class ); dayToTimeMap.put ( DayOfWeek.TUESDAY,LocalTime.parse ( "20:00" ) ); dayToTimeMap.put ( DayOfWeek.WEDNESDAY,LocalTime.of ( 15,0 ) ); dayToTimeMap.put ( DayOfWeek.THURSDAY,LocalTime.parse ( "20:00" ) ); dayToTimeMap.put ( DayOfWeek.FRIDAY,LocalTime.parse ( "18:00" ) ); dayToTimeMap.put ( DayOfWeek.SATURDAY,LocalTime.parse ( "15:00" ) ); 获取当前的星期几和时间. DayOfWeek today = DayOfWeek.WEDNESDAY; LocalTime now = LocalTime.of ( 11,13 ); 制作一对空集,以跟踪与现在相同或晚于现在的日期,以及跟踪较早日期的日期.作为EnumSet,它们的自然顺序是在DayOfWeek枚举(周一至周日,1-7)中声明的顺序. EnumSet<DayOfWeek> earlier = EnumSet.noneOf ( DayOfWeek.class ); EnumSet<DayOfWeek> later = EnumSet.noneOf ( DayOfWeek.class ); 循环DayOfWeek到LocalTime地图.查看DayOfWeek是否在今天之前,等于或晚于今天.如果等于今天,则将其LocalTime对象与我们现在的对象进行比较.将此DayOfWeek对象分配给较早的集或较晚的集. for ( Map.Entry<DayOfWeek,LocalTime> entry : dayToTimeMap.entrySet () ) { DayOfWeek key = entry.getKey (); LocalTime value = entry.getValue (); int comparison = key.compareTo ( today ); if ( comparison < 0 ) { // if earlier day… earlier.add ( key ); } else if ( comparison == 0 ) { //If same day… if ( value.isBefore ( now ) ) { earlier.add ( key ); } else { // Else same time as now or later than now… later.add ( key ); } } else if ( comparison > 0 ) { later.add ( key ); } else { throw new RuntimeException ( "Unexpectedly reached IF-ELSE for comparison: " + comparison ); } } 转储到控制台.我们希望首先循环后面的集合,然后根据问题中列出的要求循环先前的集合. System.out.println ( "dayToStringMap: " + dayToTimeMap ); System.out.println ( "sorted by today: " + today + " " + now + " is: " ); for ( DayOfWeek dayOfWeek : later ) { LocalTime localTime = dayToTimeMap.get ( dayOfWeek ); System.out.println ( dayOfWeek + " " + localTime ); } for ( DayOfWeek dayOfWeek : earlier ) { LocalTime localTime = dayToTimeMap.get ( dayOfWeek ); System.out.println ( dayOfWeek + " " + localTime ); } 跑步时 dayToStringMap: {TUESDAY=20:00,WEDNESDAY=15:00,THURSDAY=20:00,FRIDAY=18:00,SATURDAY=15:00} sorted by today: WEDNESDAY 11:13 is: WEDNESDAY 15:00 THURSDAY 20:00 FRIDAY 18:00 SATURDAY 15:00 TUESDAY 20:00 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |