문제

나는 그냥 무엇인지 궁금하는 가장 쉬운 방법에 대해 반복하는 설정 무기한,즉그것은 끝에 도달하면 그것은 next(); 전화 번체입니다.나는 가정이 없는 이미 미리 정의된 기능을 자바에서,그래서 그를 구현하는 가장 쉬운 방법이 있습니다.

도움이 되었습니까?

해결책

있는 방법에 훌륭한 Google 컬렉션 라이브러리는 이것:

Set<String> names = ...;
Iterable<String> infinite = Iterables.cycle(names);

(나는 추천할 수 없 Google 컬렉션 라이브러리는 강하게 충분합니다.그것은 바위에 매우 어렵습니다.나는 편견으로 나는 일에 대한 구글,하지만 난 거의 모든 google 직원이 자바를 작성하는 것을 말해 당신은 얼마나 유용한 컬렉션이 있습니다.)

다른 팁

Iterator it = mylist.iterator();
while (it.hasNext())
{
  MyType t = (MyType)it.next();

  // do something

  if (!it.hasNext())
    it = mylist.iterator();
}

EndlessIteratorCactoos:

Iterator<String> names = new EndlessIterator<>("John");

그것은 항상 반환합니다 "John" 고 끝이 없을 것입니다.

또한,체크 EndlessIterable, 를 구현하는 Iterable 과 같은 작업을 수행합니다.

당신이 만드는 경우 반복기,에서 다음 방법을 사용할 수 있는 경우에 확인하는 조건이 있는 경우 다른 개체로 목록에 있습니다.가 있으면,다음 당신이 돌아가는 개체 없는 경우에,당신은 다시 시작으로 이동의 목록을 반환하는 개체입니다.

이것은 무엇을 생각할 수 있는...

iterator = set.getIterator
//other code
if (iterator.hasNext())
    //do code here
else
    iterator = set.getIterator();

나는 생각이 무엇을 원하지 않는 데 도움 당신은 아무것도 할 수 있으로 반복기는 쉽지만해야 합니다 주로 어떤 새로운 것을 추가하지 사용이 스타일 하지만 이것은 당신이 무엇을 원하는:

if(!니다.hasNext()) { 동(니다.hasPrevious()) { 그것은=니다.이전();} }else{ 그것은=니다.다음();}

이 방법은 아무것도면 정말 당신이 관심이 있으면 다음 포인터의 마지막을 항상 첫번째 경우를 밀어 새로운 목록입니다.

는 방법에 대해?

List<String> list = // ArraysList
Interator<String> it = null;

while(true) {
 it = list.iterator();
 while(it.hasNext()) {
   System.out.println(it.next());
 }
}

원하지 않는 경우에 사용하는 구아바지만 여전히 원하고 재사용할 수 있는 솔루션:

public static class CyclicIterator<E, C extends Collection<E>> implements Iterator<E> {
    final private C mElements;
    private Iterator<E> mIterator;

    public CyclicIterator(C elements) {
        mElements = elements;
        mIterator = elements.iterator();
    }

    @Override
    public boolean hasNext() {
        if (! mIterator.hasNext()) {
            mIterator = mElements.iterator();
        }
        return mIterator.hasNext();
    }

    @Override
    public E next() {
        if (! mIterator.hasNext()) {
            mIterator = mElements.iterator();
        }
        return mIterator.next();
    }
}

참고:이 지원하지 않 remove()메소드 그러나 그것을 쉽게 추가할 수 있게 필요한 경우.또한 그것은 스레드에 안전합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top