2017-05-18 3 views
-1

컬렉션이 있습니다 Collection<RECOBeacon> recoBeacons 첫 번째 요소는 RECOBeacon first = recoBeacons.iterator().next();으로 얻지 만 두 번째 얻기에는 문제가 있습니다. RECOBeacon second = first.next();second = first.iterator().next()을 시도했지만 이들 중 아무 것도 작동하지 않았습니다. 아무도이 문제를 해결하는 방법을 알고 있습니까? 감사합니다.컬렉션의 두 번째 요소를 얻는 방법은 무엇입니까?

+1

iterator 인스턴스'recoBeacons.iterator()'를 어딘가에 저장하고 ** 해당 인스턴스에서'next()'를 다시 호출해야합니다. – QBrute

답변

3

당신은 제 1 및 제 2 요소를 모두 가져 같은 반복자를 사용해야합니다

Iterator<RECOBeacon> iter = recoBeacons.iterator(); 
RECOBeacon first = iter.next(); 
RECOBeacon second = iter.next() 

Collection보다 작이있는 경우 예외를 방지하기 위해, iter.next() 각 호출하기 전에 iter.hasNext()를 호출 좋을 것이다 두 요소.

0

@ Eran의 답변 외에도 전체 컬렉션을 반복하는 데 일반적으로 Iterator 초를 사용합니다. 당신의 경우에, 당신이 제 3, 제 4 요소를 얻고 자한다면 당신은 무엇을 할 것입니까? 그런 다음 반복자에 루프를 사용할 수 있습니다. 여기

Iterator<RECOBeacon> iter = recoBeacons.iterator(); 
while(iter.hasNext()) { 
    RECOBeacon nextBeacon = iter.next(); 
    // do something with nextBeacon 
} 

, hasNext()NoSuchElementException으로 실행에서 반복자를 방지하고 컬렉션의 끝에 도달 할 때 루프의 탈옥 원인이됩니다.

3

당신이 Java8에 있다면 당신은 스트림을 사용할 수 있습니다

RECOBeacon second = recoBeacons.stream().skip(1).findFirst().orElse(null); 

이 솔루션의 좋은 점은 당신이 사용하는 경우 같은 hasNext 검사를 할 필요가 없습니다로 findFirst이 선택 사양을 반환한다는 것입니다 반복자.

또한 Collection 인터페이스는 순서를 보장하지 않으므로 n 번째 요소를 가져 오면 예기치 않은 결과가 발생할 수 있습니다.

+0

허용 된 답변이어야합니다! –

관련 문제