2013-03-14 3 views
2

다른 팀의 라이브러리를 제공하고 있습니다. 내가 제공하는 메소드 중 하나는 Iterator를 인자로 받는다. 어떻게 든 반복의 특정 순서를 필요로하고 싶습니다. Iterator를 확장하여 코드에서이 작업을 수행 할 수있는 방법이 있습니까?Java Iterator에서 시행 규칙

+4

이터레이터를 받고 사용자가 * something * something을 필요로 할 때, 요구 사항은 최소한 방법의 문서에 명시되어야합니다. – akaIDIOT

+0

Iterator는 주문을 유지하거나 유지하지 않을 컬렉션에서 가져올 수 있습니다. – rajesh

+0

에 추가적으로 akaIDIOT를 사용하면 반복하는 동안 주문 상태를 확인하고 순서가 벗어나면 'IllegalArgumentException'을 던질 수 있습니다. – Kai

답변

1

직접적으로. 이터레이터는 시간에 아이템을주기 위해 만들어지며, 메모리에 저장하는 것을 피하고 때때로 값의 전체 목록을 전달합니다. 이는 때때로 실현 불가능할 수 있습니다.

값이 생성되는 방법과 데이터 정렬에 적용되어야하는 경계에 대해 더 많은 지식이 없으면 유일한 방법은 모든 요소를 ​​반복기에서 가져 와서 일부 목록/벡터/데이터베이스에 저장하는 것입니다. 그들을 정렬하고 정렬 된 목록을 사용하여 다른 반복자를 리턴하십시오.

+0

감사합니다. 앞서 akaIDIOT에서 언급했듯이 문서의 요구 사항을 명시 할 것입니다. 나는 여전히 요구 사항을 검사하고 예외를 던지는 것이 좋은 생각인지 확실하지 않다. 이터레이터는 데이터베이스 ResultSet의 래퍼 일 뿐이므로 목록에 요소를 저장하지 않을 수 있습니다. – MrMulliner

0

Iterator를 구현하는 구체적인 클래스의 인스턴스가 인수로 전달됩니다. 클래스를 인스턴스화 할 때 결정하기 때문에 클래스를 확장 할 수 없습니다.이 클래스는 메소드를 호출하는 코드에 의해 수행됩니다. 당신이 필요한 주문이 존중되지 않을 때 빨리 실패 할 경우

, 당신의 인수가 아니라 반복자보다의 Iterable 인 경우에만 작동합니다 Guava's Ordering.isOrdered() method.

NB을 시도합니다. 두 번 반복 할 수 있도록 Iterable (Iterator를 검색 할 수있는 인터페이스)가 필요합니다. 한 번은 순서를 확인하고 한 번 처리하면됩니다.