Подтвердить что ты не робот

Печать HashMap в Java

У меня есть HashMap:

private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();

Теперь я хотел бы просмотреть все значения и распечатать их.

Я написал это:

for (TypeValue name : this.example.keySet()) {
    System.out.println(name);
}

Это не похоже на работу.

В чем проблема?

РЕДАКТИРОВАТЬ: Другой вопрос: эта коллекция основана на нуле? Я имею в виду, если он имеет 1 ключ и значение будет размером 0 или 1?

4b9b3361

Ответ 1

keySet() возвращает только набор ключей из вашей хэш-карты, вы должны выполнить итерацию этого набора ключей и получить значение из хэш-карты, используя эти ключи.

В вашем примере тип ключа hashmap - TypeKey, но вы указали TypeValue в общем цикле for, поэтому его нельзя скомпилировать. Вы должны изменить это на:

for (TypeKey name: example.keySet()){
            String key = name.toString();
            String value = example.get(name).toString();  
            System.out.println(key + " " + value);  
} 

Обновление для Java8:

 example.entrySet().forEach(entry->{
    System.out.println(entry.getKey() + " " + entry.getValue());  
 });

Если вам не требуется печатать значение ключа и вам просто нужно значение hashmap, вы можете воспользоваться предложениями других.

Другой вопрос: является ли эта коллекция нулевой базой? Я имею в виду, если он имеет 1 ключ и значение, будет ли его размер 0 или 1?

Коллекция, возвращаемая из keySet() представляет собой Set. Вы не можете получить значение из Set с помощью индекса, поэтому вопрос не в том, является ли он нулевым или единичным. Если в вашем хэш файле есть один ключ, возвращаемый ключ keySet() будет иметь одну запись внутри, а его размер будет равен 1.

Ответ 2

Простой способ увидеть пары значений ключа:

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2

Оба метода 1 и метод 2 выводят это:

[{b=2, a=1}]

Ответ 3

Предполагая, что у вас есть Map<KeyType, ValueType>, вы можете напечатать его следующим образом:

for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    System.out.println(entry.getKey()+" : "+entry.getValue());
}

Ответ 4

У вас есть несколько вариантов

  • Получить map.values(), который получает значения, а не ключи
  • Получить map.entrySet(), который имеет
  • Получить keySet() и для каждого ключевого вызова map.get(key)

Ответ 5

Чтобы напечатать ключ и значение, используйте следующее:

for (Object objectName : example.keySet()) {
   System.out.println(objectName);
   System.out.println(example.get(objectName));
 }

Ответ 6

Вы хотите установить значение, а не набор ключей:

for (TypeValue name: this.example.values()) {
        System.out.println(name);
}

Код, который вы даете, даже не компилируется, что, возможно, стоит упомянуть в будущих вопросах - "похоже, не работает" немного расплывчато!

Ответ 7

Стоит упомянуть подход Java 8, используя BiConsumer и лямбда-функции:

BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) -> 
           System.out.println(o1 + ", " + o2);

example.forEach(consumer);

Предположим, что вы переопределили метод toString для двух типов, если это необходимо.

Ответ 8

Я сделал это с помощью String map (если вы работаете со строковой картой).

for (Object obj : dados.entrySet()) {
    Map.Entry<String, String> entry = (Map.Entry) obj;
    System.out.print("Key: " + entry.getKey());
    System.out.println(", Value: " + entry.getValue());
}

Ответ 9

Java 8 новая функция forEach стиль

import java.util.HashMap;

public class PrintMap {
    public static void main(String[] args) {
        HashMap<String, Integer> example = new HashMap<>();
        example.put("a", 1);
        example.put("b", 2);
        example.put("c", 3);
        example.put("d", 5);

        example.forEach((key, value) -> System.out.println(key + " : " + value));

//      Output:
//      a : 1
//      b : 2
//      c : 3
//      d : 5

    }
}

Ответ 10

Простой оператор печати с именем переменной, который содержит ссылку на хэш-карту, будет делать:

HashMap<K,V> HM = new HashMap<>(); //empty
System.out.println(HM); //prints key value pairs enclosed in {}

Это работает, потому что метод toString() уже перегружен в AbstractMap class, который расширяется HashMap Class Дополнительная информация из документации

Возвращает строковое представление этой карты. Строковое представление состоит из списка сопоставлений значений ключа в порядке, возвращаемом итератором просмотра entry entry, который заключен в фигурные скобки ( "{}" ). Смежные отображения разделяются символами "," (запятая и пробел). Каждое сопоставление значений ключей отображается как ключ, за которым следует знак равенства ( "=" ), за которым следует связанное значение. Ключи и значения преобразуются в строки как по String.valueOf(Object).

Ответ 11

Для меня эта простая строка работала хорошо:

Arrays.toString(map.entrySet().toArray())

Ответ 12

Если карта содержит коллекцию как значение, другие ответы требуют дополнительных усилий для их преобразования в виде строк, таких как Arrays.deepToString(value.toArray()) (если это карта значений списка) и т.д.

Я часто сталкивался с этими проблемами и сталкивался с общей функцией для печати всех объектов с помощью ObjectMappers. Это очень удобно во всех местах, особенно во время экспериментов, и я бы рекомендовал вам выбрать этот способ.

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public static String convertObjectAsString(Object object) {
    String s = "";
    ObjectMapper om = new ObjectMapper();
    try {
        om.enable(SerializationFeature.INDENT_OUTPUT);
        s = om.writeValueAsString(object);
    } catch (Exception e) {
        log.error("error converting object to string - " + e);
    }
    return s;
}

Ответ 13

Вы можете использовать класс Entry для легкого чтения HashMap.

for(Map.Entry<TypeKey, TypeKey> temp : example.entrySet()){
    System.out.println(temp.getValue()); // Or something as per temp defination. can be used
}

Ответ 14

Полезно для быстрой печати записей в HashMap

System.out.println(Arrays.toString(map.entrySet().toArray()));

Ответ 15

map.forEach((key, value) -> System.out.println(key + " " + value));

Использование функций Java 8