Хранение HashMap внутри карты - PullRequest
1 голос
/ 10 октября 2019

Учитывая следующую ситуацию:

Map<String, Object> map1 = new HashMap();
Map<String, String> map2 = new HashMap();

map2.put("Grp A", "a");
map2.put("Grp B", "b");

map1.put("Grp",map2);

Как получить значение "Grp A" из map1?

Ответы [ 4 ]

6 голосов
/ 10 октября 2019

Измените map1 на:

Map<String, Map<String, String>> map1 = new HashMap<>();

Тогда будет работать map1.get("Grp").get("Grp A").

Конечно, в общем случае безопаснее хранить map1.get("Grp") в переменной, иперед вызовом второго get():

String value = null;
Map<String, String> inner = map1.get("Grp");
if (inner != null) {
    value = inner.get("Grp A");
}

проверьте, не равен ли оно нулю. Если вы должны оставить map1 как Map<String, Object> (например, если вы должны хранить в нем значения разных типов), выВам нужно будет проверить тип значения, которое вы получили от внешнего Map, и привести его к Map, прежде чем получить внутреннее значение:

String value = null;
Object innerObj = map1.get("Grp");
if (innerObj instanceof Map<?,?>) {
    Map<?,?> inner = (Map<?,?>) map1.get("Grp");
    Object obj = inner.get("Grp A");
    if (obj instanceof String) {
        value = (String) obj;
    }
} 
4 голосов
/ 10 октября 2019

Просто извлеките map2 из map1, приведя ее к карте, а затем получите желаемое значение из этой карты:

return ((Map<String,String>)map1.get("Grp")).get("Grp A");

Однако лучше будет проверить, что map2 не является нулевым, прежде чем извлекать "GrpОтвет ":

Map<String,String> map = (Map<String,String>)map1.get("Grp");
if (map != null) {
    return map.get("Grp A");
}

@ Эран был бы более практичным, но ОП спросил, как извлечь значение из заданной HashMap.

1 голос
/ 10 октября 2019

Поскольку вы определили map1 как Map<String, Object>, его значения возвращаются как объекты. Вы можете решить это одним из следующих способов:
Casting .

Map<String,String> map2 =  = (Map<String,String>)map1.get("Gep")

Использование подходящих обобщений для m1 .

Map<String, Map<String, String>> map1 = new HashMap<>();
0 голосов
/ 10 октября 2019

Ниже приведено решение вышеуказанной проблемы

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {

    public static void main(String[] args) {

        Map<String, String> map2 = new HashMap<>();
        Map<String, Map<String, String>> map1 = new HashMap<>();

        map2.put("Grp A", "a");
        map2.put("Grp B", "b");

        map1.put("Grp",map2);

        System.out.println(map1.get("Grp").get("Grp A"));
    }
}

Надеюсь, это сработает. Спасибо ...

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