我有一张具有以下结构的地图:
Map<String,Map<String,UDT>>
我需要迭代从这个集合中提取的UDT 有没有比在Java 7中迭代值的值更简单/更简洁的方法来实现这一点?
答案 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]