迭代Map中的值

时间:2018-05-25 16:14:40

标签: java hashmap

我有一张具有以下结构的地图:

Map<String,Map<String,UDT>>

我需要迭代从这个集合中提取的UDT 有没有比在Java 7中迭代值的值更简单/更简洁的方法来实现这一点?

3 个答案:

答案 0 :(得分:1)

                Set keys = yourMap.keySet();
                Iterator<String> it = keys.iterator();
                while (it.hasNext())
                {
                    Map<String, UDT> innerMap = yourMap.get(it.next());
                    Set innerkeys = innerMap .keySet();
                    ...
                }

没有神奇的技巧,但迭代你的键集:)

答案 1 :(得分:1)

我不知道你如何比你已经建议的更简单:迭代值的值。

for (Map<String, UDT> mapValue : yourMap.values())
    for (UDT value : mapValue.values()) {
        // do things with value...
    }

答案 2 :(得分:0)

我建议采用以下方式:为每个密钥迭代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]