2012-05-07 2 views
1

2D 차원의 HashMap에서 어떻게 반복 할 수 있는지 알고 싶습니다. 나는 다음을 수행하는 Object TrueStringMap2D를 생성하고있다. 그것은 2D 맵일 것이고, 2 개의 키와 하나의 값을 의미한다.2 차원지도의 반복자

여기 구현 된 반복기는 기능이 없습니다. TrueStringMap2D에서 Iterator 메서드를 재정의하는 방법을 알지 못했습니다. S (가능한 경우 반복기()에서 제거해야 함) 누구든지 도움을받을 수 있습니까? 대단히 감사합니다 !!

+0

누구나하시기 바랍니다 도울 수? – ZelelB

+1

[SO가 모든 것을 읽으 려한다고 생각하지 않습니다.] (http://meta.stackexchange.com/a/129787/175248) 질문의 범위에 맞게 코드를 쓸어 쓸 수 있다면 거대한 이익이 될 것입니다. – Makoto

+0

나는 불필요한 맵을 포함하는 맵을 반복 할 iterator mothod를 재정의하고자한다. (내가 게시 한 클래스 Entry를 가지고) – ZelelB

답변

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 
+0

답변 해 주셔서 감사합니다. 하지만 숙제와 교수는 외부 수업을 사용해서는 안된다는 말을 들었습니다. 우리는 반복자 방법을 다시 정의해야합니다. TrueStringMap2D에 맞춰 주실 수 있습니까? 그것의 그냥 메서드 .. 그게 내가 왜 iterator 메서드) 및 내 TrueStringMap2D .. 그냥 사용하는 클래스 Entry 들어있는 인터페이스를 게시했습니다. 당신은 코드를 이해할 수 있습니까? 그 마지막 방법은 내가 구현해야합니다 .. 감사합니다 !! – ZelelB

+0

숙제 인 경우 해결해야 할 나머지 단계를 남겨 둘 것입니다. :) – aioobe

+0

하지만 각 항목의 3 개 값 (key1, key2, value)을 반환하지 않습니다 ... 단지 값을 반환합니다 .. : S – ZelelB