2017-05-18 3 views
-1

Ich habe eine Sammlung Collection<RECOBeacon> recoBeacons das erste Element wird von RECOBeacon first = recoBeacons.iterator().next(); erhalten, aber ich habe Schwierigkeiten, die zweite zu erhalten. Ich versuchte RECOBeacon second = first.next(); und second = first.iterator().next(), aber keiner von diesen arbeitete. Weiß jemand, wie man dieses Problem löst? Danke!Wie bekomme ich ein zweites Element einer Sammlung?

+1

Sie müssen Ihre Iterator-Instanz 'recoBeacons.iterator()' irgendwo speichern und 'next()' erneut auf ** diesem ** aufrufen. – QBrute

Antwort

3

Sie müssen die gleiche Iterator verwenden, um sowohl die ersten zu holen und die zweiten Elemente:

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

Es wäre besser, iter.hasNext() zu iter.next() vor jedem Anruf zu nennen, eine Ausnahme zu vermeiden, wenn die Collection weniger hat als zwei Elemente.

0

Zusätzlich zu @ Erans Antwort verwenden Sie normalerweise Iterator s zum Iterieren der gesamten Sammlung. Was würdest du in deinem Fall tun, wenn du das 3., 4. ... Element bekommen möchtest? Dann können Sie eine Schleife mit Ihrem Iterator verwenden.

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

Hier hasNext() Ihre Iterator vom Laufen in ein NoSuchElementException verhindern und bewirkt, dass aus der Schleife brechen, wenn es das Ende Ihrer Sammlung erreicht.

3

Wenn Sie auf Java8 sind, können Sie einen Stream verwenden:

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

Das schöne an dieser Lösung ist, dass Sie eine optionale findfirst zurückgibt, so dass Sie die hasNext Kontrollen wie nicht zu tun haben, bei der Verwendung von ein Iterator.

Beachten Sie auch, dass die Collection-Schnittstelle keine Garantie für die Reihenfolge bietet. Daher kann das Abrufen des n-ten Elements zu unerwarteten Ergebnissen führen.

+0

Dies sollte die akzeptierte Antwort sein! –

Verwandte Themen