2013-03-21 2 views
1

일부 라이브러리를 나열하는 Java 라이브러리에도 인터페이스가 있지만 IteratorEnumeration보다 약간 다른 논리를 따르고 있습니까? 즉, booleannext()에 돌려 보내야 다음 요소에 도달했는지 여부를 알 수 있으며 getCurrent() 메서드가 있어야 현재 요소가 반환됩니까?C#의 IEnumerator에 해당하는 Java?

UPDATE

Iterator.next() 각 통화 반복자 전진한다 전 보낸 IEnumerator.Current 당량 아니지만 후자는하지 않을 것이다.

난 내 자신의 기능과 내 자신의 클래스를 설계하고 2

UPDATE. 내 질문은 유능한 비유를 찾는 것이었다. C#의 샘플은 단지 샘플이었습니다. C#에서 Java으로 변환하지 않았습니다.

+0

'Iterator'를 서브 클래스 화하고'hasNext()'를'next()'와'next()'에서'getCurrent()'로 바꿀 수 있습니다. –

+0

@a_horse_with_no_name : getCurrent() 다음 번처럼 진행하지 않고 여러 번 객체를 처리합니다(). –

+0

@a_horse_with_no_name,'C# '에서'IEnumerator' 인터페이스 계약을 알고 있습니까? –

답변

-1

표준 콘크리트 컬렉션 클래스 (예 : HashSetArrayList)를 사용하면 이터레이터에 액세스 할 수 있습니다.

메서드 호출 : collection.hasNext()은 부울을 반환하지만 포인터는 전달하지 않습니다. 이를 통해 collection.next()을 읽어야하는지 여부를 결정할 수 있습니다.

예 : 물론

Set<String> numbers = new HashSet<>(); 

// fill in set... 

while (numbers.hasNext()) { 
    System.out.println(numbers.next()); 
} 

, 당신은 또한에 대한-각 구문을 사용하여 컬렉션을 반복 할 수

for (String s : numbers) { 
    System.out.println(s) 
} 
0

당신은 자바에서 다른 접근 방법을 사용해야합니다. 예를 들어, 대신이 C# 코드 :

java.util.HashMap<Integer, Integer> m = new java.util.HashMap<Integer, Integer>(); 
for (java.util.Iterator<java.util.Map.Entry<Integer, Integer>> it = m.entrySet().iterator(); it.hasNext();) 
{ 
    java.util.Map.Entry<Integer, Integer> current = it.next(); 
    System.out.print(current.getKey()); 
    System.out.print(current.getValue()); 
} 

이 특정 변환을위한 수요가 안 당신은 일반적으로 'foreach는'루프를 사용하는 것이기 때문에 :

Dictionary<int?, int?> m = new Dictionary<int?, int?>(); 
for (IEnumerator<KeyValuePair<int?, int?>> it = m.GetEnumerator(); it.MoveNext();) 
{ 
    Console.Write(it.Current.Key); 
    Console.Write(it.Current.Value); 
} 

당신은 사용해야합니다 C#에서는 더 깔끔하게 Java로 변환됩니다.