这里的其他答案很好,但使用过时的类。
java.time
在 Java 8 及更高版本中,我们现在内置了 java.time 框架(带有 Java 6 & 7 和 Android 的后向端口)。对旧的日期时间类的巨大改进。
java.time 类包括一对满足您确切需求的类:
通过预定义这些类型,您甚至不需要按照其他评论和答案的建议定义自己的类。至少如果您对天数排序的定义是周一到周日。枚举具有按该DayOfWeek
顺序预定义的星期几。您可以创建自己的课程DayOfWeek
,LocalTime
如果它对您的更大项目有意义的话。
Java 枚举非常方便、灵活且功能强大(如果您不熟悉,请了解更多信息)。枚举有自己的特殊实现Set
and Map
,适当命名,EnumSet
and EnumMap
。我们可以使用 anEnumMap
来跟踪一周中的每一天,将其映射到一天中的时间(一个LocalTime
对象)。
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
对象与我们的now
对象进行比较。将此 DayOfWeek 对象分配给earlier
集合或later
集合。
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 );
}
}
转储到控制台。我们想先循环later
集合,然后按照earlier
问题中列出的要求循环集合。
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