Как правильно вывести данные из Map Java
Всем привет. Буду благодарен за помощь. Есть задача написать достаточно простую программу про писателей и их книги. Есть класс Book с параметром — nameBook.
public class Book < public String getNameBook() < return nameBook; >private String nameBook; public Book(String name) < this.nameBook = name; >>
Есть класс Author, с фамилией автора, здесь же необходимо добавить метод, который добавляет книги автора и печатает их.
public class Author < public String getName() < return name; >public Author(String name) < this.name = name; >private String name; private Book book; public void addBook(Book bookName) < book= bookName; >public void aboutAuthor() < System.out.println(name + " " + book.getNameBook()); >>
и в классе main реализовать метод aboutAuthor и вывести данные в консоль в следующем формате Джоан Роулинг Гарри Поттер, Фантастические твари
public class Main < public static void main(String[] args) < Author author = new Author("Джоан Роулинг"); Book bookOne = new Book("Гарри Поттер"); Book bookTwo = new Book("Фантастические твари"); author.addBook(bookOne); author.addBook(bookTwo); author.aboutAuthor(); >>
Проблема, что я не могу, вывести по две книги в консоле, в текущей реализации выводится только второе название книги, как я понимаю, нужно применить hashmap или treemap в классе Author, где ключ — имя автора, а значения — ArrayList c его книгами? Поправьте, направьте, плз.
shcherbakoff / Solution.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| package com . javarush . test . level08 . lesson03 . task05 ; |
| import java . util . HashMap ; |
| import java . util . Map ; |
| /* Вывести на экран список значений |
| Есть коллекция HashMap, туда занесли 10 различных строк. |
| Вывести на экран список значений, каждый элемент с новой строки. |
| */ |
| public class Solution |
| public static void main ( String [] args ) throws Exception |
| HashMap < String , String >map = new HashMap < String , String >(); |
| map . put ( «Sim» , «Sim» ); |
| map . put ( «Tom» , «Tom» ); |
| map . put ( «Arbus» , «Arbus» ); |
| map . put ( «Baby» , «Baby» ); |
| map . put ( «Cat» , «Cat» ); |
| map . put ( «Dog» , «Dog» ); |
| map . put ( «Eat» , «Eat» ); |
| map . put ( «Food» , «Food» ); |
| map . put ( «Gevey» , «Gevey» ); |
| map . put ( «Hugs» , «Hugs» ); |
| printValues ( map ); |
| > |
| public static void printValues ( Map < String , String >map ) |
| for ( Map . Entry < String , String >pair : map . entrySet ()) |
| String value = pair . getValue (); |
| System . out . println ( value ); |
| > |
| > |
| > |
Распечатайте все ключи и значения с карты в Java
В этом посте будут обсуждаться различные методы вывода всех ключей и значений из карты в Java.
Похожие сообщения:
Мы знаем, что keySet() метод возвращает установленное представление ключей, содержащихся в карте, и values() метод возвращает установленное представление значений, содержащихся в карте. Итак, мы можем использовать keySet() распечатать все ключи, присутствующие на карте, и values() для печати всех значений. Есть несколько способов сделать это:
1. Использование Iterator
Map не имеет собственного итератора, поскольку он не расширяет Collection интерфейс. Оба keySet() а также values() возвращает набор, а набор расширяет Collection интерфейс, мы можем получить итератор.
2. Для каждого цикла
Цикл For-each доступен для любого объекта, реализующего Iterable интерфейс. В качестве Set расширяет Iterable интерфейс, мы можем использовать цикл for-each для перебора набора ключей и значений.
3. Java 8 — Iterator.forEachRemaining()
The Iterator интерфейс обеспечивает forEachRemaining() метод, который может печатать каждый элемент, пока все элементы не будут обработаны.
4. Java 8 – Stream.forEach()
Мы можем использовать цикл по набору ключей и значениям, используя Stream.forEach() метод для печати каждого элемента потока.
5. Использование toString()
Для отображения всех ключей или значений, присутствующих на карте, мы можем просто напечатать строковое представление keySet() а также values() , соответственно.
Ниже приведена простая программа на Java, которая печатает все ключи карты, используя keySet() в Java:
Как распечатать map java
Интерфейс Map представляет отображение или иначе говоря словарь, где каждый элемент представляет пару «ключ-значение». При этом все ключи уникальные в рамках объекта Map. Такие коллекции облегчают поиск элемента, если нам известен ключ — уникальный идентификатор объекта.
Следует отметить, что в отличие от других интерфейсов, которые представляют коллекции, интерфейс Map НЕ расширяет интерфейс Collection.
Среди методов интерфейса Map можно выделить следующие:
- void clear() : очищает коллекцию
- boolean containsKey(Object k) : возвращает true, если коллекция содержит ключ k
- boolean containsValue(Object v) : возвращает true, если коллекция содержит значение v
- Set> entrySet() : возвращает набор элементов коллекции. Все элементы представляют объект Map.Entry
- boolean equals(Object obj) : возвращает true, если коллекция идентична коллекции, передаваемой через параметр obj
- boolean isEmpty : возвращает true, если коллекция пуста
- V get(Object k) : возвращает значение объекта, ключ которого равен k. Если такого элемента не окажется, то возвращается значение null
- V getOrDefault(Object k, V defaultValue) : возвращает значение объекта, ключ которого равен k. Если такого элемента не окажется, то возвращается значение defaultVlue
- V put(K k, V v) : помещает в коллекцию новый объект с ключом k и значением v. Если в коллекции уже есть объект с подобным ключом, то он перезаписывается. После добавления возвращает предыдущее значение для ключа k, если он уже был в коллекции. Если же ключа еще не было в коллекции, то возвращается значение null
- V putIfAbsent(K k, V v) : помещает в коллекцию новый объект с ключом k и значением v, если в коллекции еще нет элемента с подобным ключом.
- Set keySet() : возвращает набор всех ключей отображения
- Collection values() : возвращает набор всех значений отображения
- void putAll(Map map) : добавляет в коллекцию все объекты из отображения map
- V remove(Object k) : удаляет объект с ключом k
- int size() : возвращает количество элементов коллекции
Чтобы положить объект в коллекцию, используется метод put , а чтобы получить по ключу — метод get . Реализация интерфейса Map также позволяет получить наборы как ключей, так и значений. А метод entrySet() возвращает набор всех элементов в виде объектов Map.Entry .
Обобщенный интерфейс Map.Entry представляет объект с ключом типа K и значением типа V и определяет следующие методы:
- boolean equals(Object obj) : возвращает true, если объект obj, представляющий интерфейс Map.Entry , идентичен текущему
- K getKey() : возвращает ключ объекта отображения
- V getValue() : возвращает значение объекта отображения
- V setValue(V v) : устанавливает для текущего объекта значение v
- int hashCode() : возвращает хеш-код данного объекта
При переборе объектов отображения мы будем оперировать этими методами для работы с ключами и значениями объектов.
Классы отображений. HashMap
Базовым классом для всех отображений является абстрактный класс AbstractMap , который реализует большую часть методов интерфейса Map. Наиболее распространенным классом отображений является HashMap , который реализует интерфейс Map и наследуется от класса AbstractMap.
Пример использования класса:
import java.util.*; public class Program < public static void main(String[] args) < Mapstates = new HashMap(); states.put(1, "Germany"); states.put(2, "Spain"); states.put(4, "France"); states.put(3, "Italy"); // получим объект по ключу 2 String first = states.get(2); System.out.println(first); // получим весь набор ключей Set keys = states.keySet(); // получить набор всех значений Collection values = states.values(); //заменить элемент states.replace(1, "Poland"); // удаление элемента по ключу 2 states.remove(2); // перебор элементов for(Map.Entry item : states.entrySet()) < System.out.printf("Key: %d Value: %s \n", item.getKey(), item.getValue()); >Map people = new HashMap(); people.put("1240i54", new Person("Tom")); people.put("1564i55", new Person("Bill")); people.put("4540i56", new Person("Nick")); for(Map.Entry item : people.entrySet()) < System.out.printf("Key: %s Value: %s \n", item.getKey(), item.getValue().getName()); >> > class Person < private String name; public Person(String value)< name=value; >String getName() >
Чтобы добавить или заменить элемент, используется метод put, либо replace, а чтобы получить его значение по ключу — метод get. С помощью других методов интерфейса Map также производятся другие манипуляции над элементами: перебор, получение ключей, значений, удаление.