Итерация значений в карте - PullRequest
0 голосов
/ 25 мая 2018

У меня есть карта со следующей структурой:

Map<String,Map<String,UDT>>

Мне необходимо выполнить итерацию UDT, извлеченных из этой коллекции.
Существует ли более простой / удобный способ добиться этого, чем итерация значенийзначения в Java 7?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

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

for (Map<String, UDT> mapValue : yourMap.values())
    for (UDT value : mapValue.values()) {
        // do things with value...
    }
0 голосов
/ 25 мая 2018

Я предлагаю следующий способ: может быть полезно итерировать UDT для каждого ключа

   package com.test;

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

   public class MainApp {

    private static class UDT {
    private String value;

    public UDT(String value) {
        super();
        this.value = value;
    }

    @Override
    public String toString() {
        return "UDT [value=" + value + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((value == null) ? 0 : value.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        UDT other = (UDT) obj;
        if (value == null) {
            if (other.value != null)
                return false;
        } else if (!value.equals(other.value))
            return false;
        return true;
    }

}

public static void main(String[] args) {
    Map<String, Map<String, UDT>> udtHolderMap = new HashMap<>();
    Map<String, UDT> udtMap1 = new HashMap<>();
    udtMap1.put("1", new UDT("100"));
    udtMap1.put("2", new UDT("200"));

    Map<String, UDT> udtMap2 = new HashMap<>();
    udtMap2.put("3", new UDT("300"));
    udtMap2.put("4", new UDT("400"));

    udtHolderMap.put("1", udtMap1);
    udtHolderMap.put("2", udtMap2);

    for (Map.Entry<String, Map<String, UDT>> entry : udtHolderMap.entrySet()) {
        String key = entry.getKey();
        Map<String, UDT> value = entry.getValue();
        System.out.println("\nFor key="+key+" UDTs are below");
        for (Map.Entry<String, UDT> udtEntry : value.entrySet()) {
            UDT valueFromUdtMap = udtEntry.getValue();
            System.out.println(valueFromUdtMap);
        }
    }
}

}

Вывод будет выглядеть следующим образом:

For key=1 UDTs are below
UDT [value=100]
UDT [value=200]

For key=2 UDTs are below
UDT [value=300]
UDT [value=400]
0 голосов
/ 25 мая 2018
                Set keys = yourMap.keySet();
                Iterator<String> it = keys.iterator();
                while (it.hasNext())
                {
                    Map<String, UDT> innerMap = yourMap.get(it.next());
                    Set innerkeys = innerMap .keySet();
                    ...
                }

Никакого волшебного трюка, кроме перебора ваших наборов ключей:)

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