迭代器在2维地图(iterator in a 2Dimensional Map)

2019-10-16 16:41发布

我想知道我可以在2维的HashMap迭代? 我创建一个对象TrueStringMap2D是执行以下操作:这将是一个2D地图,我的意思是2个键和一个值。

但在这里实现的迭代器不能正常工作..我不知道如何重新定义TrueStringMap2D iterator方法:S(如果可能的话,应在迭代器()功能删除)任何人都可以帮助吗? 非常感谢你!!

Answer 1:

我会重新解释的问题到类似的东西,我乐意回答的问题,然后希望在这个问题的答案对你有用。

这是我会回答这个问题:

我如何写遍历所有值的迭代器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


文章来源: iterator in a 2Dimensional Map