我想知道我可以在2维的HashMap迭代? 我创建一个对象TrueStringMap2D是执行以下操作:这将是一个2D地图,我的意思是2个键和一个值。
但在这里实现的迭代器不能正常工作..我不知道如何重新定义TrueStringMap2D iterator方法:S(如果可能的话,应在迭代器()功能删除)任何人都可以帮助吗? 非常感谢你!!
我想知道我可以在2维的HashMap迭代? 我创建一个对象TrueStringMap2D是执行以下操作:这将是一个2D地图,我的意思是2个键和一个值。
但在这里实现的迭代器不能正常工作..我不知道如何重新定义TrueStringMap2D iterator方法:S(如果可能的话,应在迭代器()功能删除)任何人都可以帮助吗? 非常感谢你!!
我会重新解释的问题到类似的东西,我乐意回答的问题,然后希望在这个问题的答案对你有用。
这是我会回答这个问题:
我如何写遍历所有值的迭代器
Map<String, Map<String, String>>
?
这是我会怎么解决这个问题:
class TwoDimIterator implements Iterator<String> {
Iterator<Map<String, String>> outerIter;
Iterator<String> innerIter = Collections.<String>emptyList().iterator();
public TwoDimIterator(Map<String, Map<String, String>> twoDimMap) {
outerIter = twoDimMap.values().iterator();
advanceInner();
}
@Override
public boolean hasNext() {
return innerIter.hasNext();
}
@Override
public String next() {
String toReturn = innerIter.next();
advanceInner();
return toReturn;
}
private void advanceInner() {
while (!innerIter.hasNext()) {
if (!outerIter.hasNext()) {
innerIter = Collections.<String>emptyList().iterator();
return;
}
innerIter = outerIter.next().values().iterator();
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
测试代码:
class Test {
public static void main(String[] args) {
// Create a map
Map<String, Map<String, String>> twoDimMap =
new HashMap<String, Map<String, String>>();
// Fill it
Map<String, String> innerA = new HashMap<String, String>();
innerA.put("1", "A1");
innerA.put("2", "A2");
Map<String, String> innerB = new HashMap<String, String>();
innerB.put("1", "B1");
innerB.put("2", "B2");
twoDimMap.put("A", innerA);
twoDimMap.put("B", innerB);
// Create an iterator for the values:
Iterator<String> twoDimIter = new TwoDimIterator(twoDimMap);
while (twoDimIter.hasNext())
System.out.println(twoDimIter.next());
}
}
输出:
A2
A1
B2
B1