나는 질문을 내가 좋아하는 비슷한 것으로 재 해석 할 것이고, 그 질문에 대한 대답은 당신에게 유용 할 것입니다.
여기에 내가 답변 해 드리겠습니다 문제는 다음과 같습니다
어떻게 반복자를 쓰는가하는 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
누구나하시기 바랍니다 도울 수? – ZelelB
[SO가 모든 것을 읽으 려한다고 생각하지 않습니다.] (http://meta.stackexchange.com/a/129787/175248) 질문의 범위에 맞게 코드를 쓸어 쓸 수 있다면 거대한 이익이 될 것입니다. – Makoto
나는 불필요한 맵을 포함하는 맵을 반복 할 iterator mothod를 재정의하고자한다. (내가 게시 한 클래스 Entry를 가지고) – ZelelB