ТЛ; др
map.get( Month.FEBRUARY ).get( 2 - 1 )
A5
Java
Month
enum
Во-первых, вы должны знать, что Java заранее определила набор из 12 объектов для месяцев в перечислении Month
. Кстати, средство enum в Java гораздо более мощное и гибкое, чем обычно в большинстве языков; Вы можете узнать больше .
Кстати, вы можете попросить класс Month
автоматически локализовать название месяца с помощью метода getDisplayName
.
List
Ваши числа равны 1, 2, 3, поэтому мы можем использовать их для доступа к List
.
К сожалению, доступ к List
предоставляется только в виде индекса, что означает отсчет на основе 0 (неудачное похмелье с первых дней программирования). Поэтому мы должны вычесть одно из числа дня месяца. Например, для 1-го используйте 0, для 2-го используйте 1.
Map
Мы можем сопоставить каждый месяц его списку значений, используя Map
.
Коллекция литералов
Java 9 предоставляет новые удобные методы Map.ofEntries
и List.of
для краткой генерации немодифицируемых коллекций.
Map< Month, List< String > > map =
Map.ofEntries(
entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) , // This syntax requires at top: import static java.util.Map.entry ;
entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
)
;
Доступ к Map
и List
Попробуйте. Имитация ввода пользователем месяца и дня.
Month m = Month.FEBRUARY;
int dayOfMonth = 2;
Или получите месяц по номеру 1-12 за январь-декабрь.
Month m= Month.of( 2 );
Получите доступ к Map
, чтобы получить List
за месяц Передача объекта Month
возвращает нас к объекту List
, который мы поместили на карту.
List< String > list = map.get( m );
Получите доступ к List
, чтобы получить желаемый String
, например A5
.
String result = list.get( dayOfMonth - 1 ); // Subtract one for zero-based index.
Или объедините эти две строки в одну, чтобы получить доступ к Map
и List
.
String result = map.get( m ).get( dayOfMonth - 1 ); // One-liner, alternative.
A5
Давайте посмотрим весь этот код вместе.
Map< Month, List< String > > map = Map.ofEntries(
entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) , // This syntax requires at top: import static java.util.Map.entry ;
entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
);
Month m = Month.FEBRUARY; // Or, Month.of( 2 )
int dayOfMonth = 2;
List< String > list = map.get( m ); // Passing a `Month` object gets us back the `List` object we had put into the map.
String result = list.get( dayOfMonth - 1 ); // Subtract one for zero-based index counting to access `List`.
String result2 = map.get( m ).get( dayOfMonth - 1 ); // One-liner, alternative.