二维地图中的迭代器

时间:2012-05-07 15:15:21

标签: java map iterator nested

我想知道如何迭代2Dimensional HashMap?我正在创建一个Object TrueStringMap2D,它执行以下操作:它将是一个2D地图,我的意思是2个键和一个值。

但是这里实现的迭代器不起作用..我不知道如何重新定义TrueStringMap2D中的Iterator方法:S(如果可能的话应该在iterator()函数中删除) 有人可以帮忙吗? 非常感谢!!

1 个答案:

答案 0 :(得分:3)

我会将这个问题重新解释为类似于我喜欢回答的问题,然后希望这个问题的答案对你有用。

以下是我要回答的问题:

  

如何编写迭代器来迭代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