“我的”代码:
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并将存储在值中的属性的String与输入数据进行比较..所以我需要能够访问hashmap的值中的属性.hope使得感..)
答案 0 :(得分:5)
您可以通过提供密钥来访问地图中的值:
// 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)在我的代码中,我使用Java Generics,因为这是至少5年以来的标准方式。
b)您应该考虑从The Map Interface阅读Java Tutorial。
答案 1 :(得分:1)
a):如果您使用 JDK1.5 或更高版本,请使用通用和增强型循环。代码将更简单,更安全:
for(Map.Entry<Key, YourObj> entry: this.media.entrySet()){
System.out.println(entry.getValue().getAttribute());
}
b):如果您必须使用 JDK1.4 或更低版本,则必须投射您的对象:((YourObj)val).getAttribute();
答案 2 :(得分:0)
Object val = hashmap.get(key);
// doesn't work..
System.out.println(val.getAttribute());
这里的问题是Java是静态类型的,这意味着您需要转换val
才能访问非Object方法。您需要将val
转换为hashmap中的实际类型,因为您没有使用泛型。
MyClass val = (MyClass) hashmap.get(key);
答案 3 :(得分:0)
尝试更改此行:
Object val = hashmap.get(key);
到这一行:
YourClass val = (YourClass) hashmap.get(key);
由于您获得的是Object类型,因此无需先调用类的方法就可以调用类的方法。
顺便说一句,你应该认真考虑使用Java Generics
答案 4 :(得分:0)
您需要对目标对象的类型进行强制转换。喜欢:
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());
}
答案 5 :(得分:0)
如果您的问题是如何在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;