Карта records в Java
Карта Map связывает ключ и значение - как
в уроках про карты в основном учебнике, только
значением часто служит record с несколькими
компонентами. Литерал Map.of связывает
ключ с готовым объектом:
record Post(String title, int views) {}
Положим записи в карту по ключу и выведем заголовок первой:
import java.util.Map;
Map<Integer, Post> byId = Map.of(
1, new Post("News", 12),
2, new Post("Guide", 40)
);
System.out.println(byId.get(1).title());
Метод get возвращает ссылку или null,
если ключа нет. Компоненты записи читают после
проверки или через цепочку, если ключ известен:
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Post> env = Map.of(
"prod", new Post("Release", 500)
);
Post post = env.get("prod");
if (post != null) {
System.out.println(post.views());
}
}
}
Карту можно обойти в цикле: на каждой паре
key и value значение уже имеет
тип record и печатается или сравнивается
как отдельный объект:
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Post> pages = Map.of(
"home", new Post("Home", 100),
"blog", new Post("Blog", 50)
);
for (Map.Entry<String, Post> row : pages.entrySet()) {
System.out.println(row.getKey() + " " + row.getValue().views());
}
}
}
Сделайте record Employee с компонентами
name и dept.
Дана карта:
Map<String, Employee> staff = Map.of(
"e1", new Employee("Ann", "IT"),
"e2", new Employee("Bob", "HR")
);
Выведите на экран отдел сотрудника с ключом
"e2" из карты staff.
Сделайте record Employee с компонентами
name и salary.
Соберите карту из двух ключей "jun"
и "sen" с разным окладом.
Выведите на экран salary() для
записи "jun".