Как получить атрибуты для значения HashMap? - PullRequest
4 голосов
/ 27 апреля 2011

код "my":

public void iterateHashmap2() {
    HashMap hashmap = this.media;
    Iterator it = hashmap.keySet().iterator();
    while (it.hasNext())
    {
        Object key = it.next();
        Object val = hashmap.get(key);
            // doesn't work..
        System.out.println(val.getAttribute);
    }
}

Итак, мой вопрос: как мне получить атрибуты, которые содержит значение?Значение - это класс, который я создал сам, который содержит 4 строки и другой класс, который я создал в качестве атрибутов.(То, что я хочу сделать, это перебрать хэш-карту и сравнить строку атрибута, который хранится в значении, с входными данными .. поэтому мне нужно иметь возможность доступа к атрибутам в значениях hashmap..hope, которыйсмысл ..)

Ответы [ 6 ]

5 голосов
/ 27 апреля 2011

Вы получаете доступ к значениям на карте, предоставляя ключ:

// create a map
Map<String, MyObject> map = new HashMap<String, MyObject>();
// store a value
map.put("key", someObject);
// retrieve a value
MyObject someObject2 = map.get("key");

Вы также можете использовать

  • map.keySet() для получения всех ключей
  • map.values() для получения всех значений без ключей
  • map.entrySet() для получения всех отображений. Каждая запись представляет один ключ, сопоставленный одному значению.

a) В моем коде я использую Generics Java , потому что это был стандартный способ сделать это в течение по крайней мере 5 лет.
б) Вам следует прочитать Интерфейс карты из Java Tutorial .

1 голос
/ 27 апреля 2011

a): если вы используете JDK1,5 или выше, используйте общий и расширенный цикл.Код будет намного проще и безопаснее:

 for(Map.Entry<Key, YourObj> entry: this.media.entrySet()){
    System.out.println(entry.getValue().getAttribute());
 }

b): если вам нужно использовать JDK1.4 или ниже, вы должны привести свой объект: ((YourObj)val).getAttribute();

0 голосов
/ 27 апреля 2011

Если ваш вопрос заключается в том, как привести значение, сопоставленное ключу в HashMap, почему бы не использовать обобщенные значения для достижения этого:

public void iterateHashmap2() {
    HashMap<Object,YourClass> hashmap = this.media;
    Iterator<YourClass> it = hashmap.keySet().iterator();
    while (it.hasNext())
    {
        Object key = it.next();
        YourClass val = hashmap.get(key);
            // if YourClass has a getAttribute() method then this will work
        System.out.println(val.getAttribute());
    }
}

Также обратите внимание, что всегда полезно работать на уровне интерфейса - вот эта строка:

    HashMap<Object,YourClass> hashmap = this.media;

должно быть

    Map<Object,YourClass> hashmap = this.media;
0 голосов
/ 27 апреля 2011

Вам понадобится приведение к типу вашего целевого объекта. Нравится:

YourObject val = (YourObject) hashmap.get(key); 

Но ...

  • Ваша карта должна быть общей, как Map<KeyClass, ValueClass>
  • Есть лучший способ перебрать Map:

Пример:

for (Map.Entry<KeyClass, ValueClass> entry : map.entrySet()) {
    KeyClass key = entry.getKey();
    ValueClass val = entry.getValue());
} 
0 голосов
/ 27 апреля 2011

Попробуйте изменить эту строку:

Object val = hashmap.get(key);

к этой строке:

YourClass val = (YourClass) hashmap.get(key);

Поскольку вы получаете тип Object, вы не можете просто вызвать метод вашего класса, не предварительно правильно его приведя.

Кстати, вы должны серьезно рассмотреть вопрос об использовании Обобщения Java

0 голосов
/ 27 апреля 2011
Object val = hashmap.get(key);
            // doesn't work..
System.out.println(val.getAttribute());

Проблема здесь в том, что Java статически типизирована, что означает, что вам нужно будет привести val для доступа к необъектным методам.Вам нужно привести val в качестве типа на самом деле в hashmap, так как вы не используете дженерики.

MyClass val = (MyClass) hashmap.get(key);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...