ここでの他の回答は良いですが、時代遅れのクラスを使用してください。
java.time
Java 8 以降では、java.time フレームワークが組み込まれています (Java 6 & 7 および Android 用のバックポート付き)。古い日時クラスに対する大幅な改善。
java.time クラスには、ニーズに正確に適合する 1 組のクラスが含まれています。
これらのタイプが事前に定義されているため、他のコメントや回答で提案されているように、独自のクラスを定義する必要さえありません。少なくとも、日付の並べ替えの定義が月曜日から日曜日まで実行される場合。列挙型には、その順序で定義済みのDayOfWeek
曜日があります。を組み合わせて独自のクラスを作成することができ、それが意味を成す場合は、より大きなプロジェクトになります。DayOfWeek
LocalTime
Java 列挙型は非常に便利で、柔軟性があり、強力です (そのため、初めて使用する場合は詳しく学んでください)。列挙型には、適切に名前が付けられたSet
との独自の特別な実装があります。を使用して各曜日を追跡し、時刻 (オブジェクト) にマッピングできます。Map
EnumSet
EnumMap
EnumMap
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 );
空のセットのペアを 1 つ作成して、今日と現在よりも同じまたは後の時刻を追跡し、もう 1 つを以前の時刻を追跡します。であるためEnumSet
、それらの自然な順序は、DayOfWeek
列挙型で宣言された順序 (月曜から日曜、1-7) です。
EnumSet<DayOfWeek> earlier = EnumSet.noneOf ( DayOfWeek.class );
EnumSet<DayOfWeek> later = EnumSet.noneOf ( DayOfWeek.class );
DayOfWeek-to-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