遍历hashmaps的hashmap以在Java中检索字符串值

时间:2014-04-01 11:16:51

标签: java hashmap linkedhashmap

我是Java的新手(对于强类型不太熟悉)我有一个接受HashMap的方法。这个hashmap中的一个键包含一个键,它有一个值的hashmap,它也指向一个hashmap等,直到我们到达一个字符串:y

HashMap1->HashMap2->HashMap3->HashMap4->String

我试图按如下方式访问它:

HashMap1
    .get("aKey")
    .get("anotherKey")
    .get("yetAnotherKey")
    .get("MyString");

但后来我收到了错误,

  

对象没有方法“get(String)

这是方法,简化:

public HashMap<String, HashMap> getMyString(Map<String, HashMap> hashMap1) {
    String myString = hashMap1
                          .get("aKey")
                          .get("anotherKey")
                          .get("yetAnotherKey")
                          .get("MyString");

    // do something with myString.

    return hashMap1;
}

如何正确定义方法和参数以轻松访问嵌套元素?

谢谢,

3 个答案:

答案 0 :(得分:1)

您拨打的.get电话太多了。可能最后一个不需要。

您是否可以使用任意数量的字符串字段创建class CompoundKey并将其用作密钥?它会简化你的设计。

要在Java中正确使用它,您需要覆盖hashCodeequals方法。

答案 1 :(得分:1)

简单就是那个

HashMap1.get("aKey") -- > return hashMap2
.get("anotherKey") --> return hashMap3
.get("yetAnotherKey") --> return hashMap4
.get("MyString"); --> return String

添加部分有问题。

现在你有如下结构。

hashmap1 --> hashmap2 --> String 

String myString = hashMap1.get("aKey").get("MyString");

应该是这样的。

答案 2 :(得分:0)

首先应该使用不实现的接口,因此尽可能使用Map(而不是HashMap)。

其次,你应该修复你的泛型并使用所有级别。现在,编译器可以帮助您并可能显示您的错误。

// i suppose you want to return a String, at least the method name tells it
public String getMyString(Map<String, Map<String, Map<String, Map<String, String>>>> hashMap1) {
    String myString = hashMap1
                      .get("aKey")
                      .get("anotherKey")
                      .get("yetAnotherKey")
                      .get("MyString");

    return myString;
}

但我建议你使用不同的数据结构。