二维地图中的迭代器 [英] iterator in a 2Dimensional Map

查看:154
本文介绍了二维地图中的迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

解决方案

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



这是我会回答的问题:


如何编写一个迭代器,迭代遍历 Map< String,Map< String,String>

$中的所有值b $ b

这是我如何解决的:

 类TwoDimIterator实现Iterator< String> {

迭代器< Map< String,String>> outerIter;
迭代器< String> innerIter = Collections。< String> emptyList()。iterator();

public TwoDimIterator(Map< String,Map< String,String>> twoDimMap){
outerIter = twoDimMap.values()
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();
}
}

测试代码 / p>

  class Test {

public static void main(String [] args){

//创建一个地图
Map< String,Map< String,String>> twoDimMap =
new HashMap< String,Map< String,String>>();

//填写
Map< String,String> innerA = new HashMap< String,String>();
innerA.put(1,A1);
innerA.put(2,A2);

地图< String,String> innerB = new HashMap< String,String>();
innerB.put(1,B1);
innerB.put(2,B2);

twoDimMap.put(A,innerA);
twoDimMap.put(B,innerB);

//为值创建一个迭代器:
迭代器< String> twoDimIter = new TwoDimIterator(twoDimMap);
while(twoDimIter.hasNext())
System.out.println(twoDimIter.next());

}
}

输出: strong>

  A2 
A1
B2
B1


I would like to know how can I iterate in a 2Dimensional HashMap? I am creating an Object TrueStringMap2D that does the following: It will be a map 2D, i mean 2 keys and one value.

But the iterator implemented here is not functional.. i didnt know how to redefine the Iterator method in TrueStringMap2D :S (if possible should be remove in the iterator() functional) Anyone can help? Thankyou very much!!

解决方案

I'll reinterpret the question into something similar that I enjoy answering, and then hopefully the answer to that question is useful to you.

Here's the question I'll answer:

How do I write an iterator that iterates over all values in a Map<String, Map<String, String>>?

This is how I would solve it:

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();
    }
}

Test code:

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());

    }
}

Output:

A2
A1
B2
B1

这篇关于二维地图中的迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆