Как получить ключ из вложенных HashMaps вместо его значения - PullRequest
0 голосов
/ 29 октября 2019

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

Я новичок в java и знаю, как получить доступ к значению самого внутреннего hashmap (с помощьюметод get (), но я не могу понять, как легко получить доступ к ключу внутреннего hashmap. HashMap имеет свой собственный класс и определяется следующим образом:

HashMap<String, HashMap<String, HashMap<Double, Integer>>> data;
data = new HashMap<String, HashMap<String, HashMap<Double, Integer>>>();

Я могу прекрасно получить значение самого внутреннего HashMap с помощью метода get (), который я определил в классе:

int get(String a, String b, Double c){
        if (data.containsKey(a)){
            if (data.get(a).containsKey(b)){
                  if (data.get(a).get(b).containsKey(c){    
                            return data.get(a).get(b).get(c);
                  }
            }       
        } 
        return 0;

Теперь я хочу определить метод getk () для этого класса и HashMap, который позволяет мне получить ключ внутреннего HashMap, введя первые два ключа следующим образом:

double getk(String a, String b){
        if (data.containsKey(a)){
            if (data.get(a).containsKey(b)){
                return ***I don't know what to put here***;
            }       
        } 
        return 0;
    }

Редактировать дополнительноинформация: ключ "c", который я хочу получить, имеет отношение 1: 1 с ключом "b". Есть ли возможность легко решить это?

Большое спасибо за ваше время и помощь;)

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Вы можете вызвать метод keySet () для объекта hashmap, чтобы получить Набор всех ключей в hashmap.

myMap.keySet ();

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#keySet--

0 голосов
/ 29 октября 2019

Редактировать:

Извините, я неправильно понял ваш вопрос. Все, что вам нужно сделать, это просто вернуть следующее

data.get(a).get(b).keySet().iterator().next();

Поскольку в хэш-наборе b есть только один ключ c, при повторении первого элемента возвращается ключ c

keySet() метод возвращает набор всех ключей.

0 голосов
/ 29 октября 2019

Вы не можете получить только один ключ внутреннего Hashmap. Потому что Hashmap содержит в качестве ключей набор ключей. Вы можете получить список ключей, позвонив по телефону:

map.keySet();

Ваша IDE должна помочь вам найти это.

[EDIT]

Если у вас есть отношения 1: 1, просто использовал объект Pair Wrapper, чем HashMap. как этот:

public class KeyValue {
    private double key;
    private Integer value;

    public KeyValue(double key, Integer value) {
        this.key = key;
        this.value = value;
    }

    public double getKey() {
        return key;
    }

    public void setKey(double key) {
        this.key = key;
    }

    public Integer getValue() {
        return value;
    }

    public void setValue(Integer value) {
        this.value = value;
    }
}

Вы сможете получить свой ключ, вызвав getKey () этого объекта.

...