2016-10-16 1 views
1

Ich habe eine schwierige Frage für mich zu erklären. In einigen Worten habe ich eine Set<object> und ich muss Elemente nacheinander bekommen (d. H. Ich muss nur ein Element der Menge erhalten), aber ich kann nicht, wenn aus einem für Zyklus. Zum Beispiel hier kann ich alles bekommen:Holen Sie sich ein einzelnes Element in einem Satz

for (Iterator<Object> i = fh.getParsed().iterator(); i.hasNext();) { 
     HTTPFormat next = (HTTPFormat) i.next(); 
     System.out.println(next.getIP()); 
    } 

aber wenn ich nur ein Element drucken möchte (dh System.out.println (trial.getParsed() erhalten (0)), um mich zu verstehen.. sag, dass ich ein Set namens "geparst" in einer Klasse als Attribut und ein Getter für geparst habe. Ich weiß nicht, ob ich auch so klar war, aber ich hoffe ja. Wenn du Zweifel hast, solltest du fragen! :) Vielen Dank!

+0

Also, wenn Sie das erste drucken möchten, warum Sie den Code nicht schlagen Sie vor, oder nicht eine Schleife verwenden? –

+0

Im Allgemeinen werden Sets nicht bestellt. Wenn Ihr Set mehr als ein Element enthält, gibt es keine Garantie, welches Element Sie erhalten werden, wenn Sie nach dem "ersten" fragen. Insbesondere wenn Sie das erste Element in der Iteration durchlaufen und iterieren, gibt es keine Garantie dafür, dass es sich um ein Element handelt, das zuerst zur Gruppe –

Antwort

4

Wenn Sie ein einzelnes Element des Set möchten, können Sie schreiben

HTTPFormat element = (HTTPFormat) fh.getParsed().iterator().next(); 

Dies wird das erste Element des Set gemäß der Iterationsreihenfolge zurückzukehren. Wenn dies eine geordnete Menge ist (z. B. TreeSet), wird das erste Element gemäß dieser Bestellung zurückgegeben. Wenn es ein HashSet ist, würde es ein beliebiges Element (das von der hashCode() Implementierung von HTTPFormat und der aktuellen Größe des Set abhängt) zurückgeben.

Beachten Sie, dass eine Ausnahme ausgelöst wird, wenn Set leer ist.

P.S. Ich würde kein Set<Object> verwenden. Wenn Ihr SetHTTPFormat Elemente enthält, verwenden Sie einen Set<HTTPFormat>, um den unsicheren Cast zu vermeiden.

+1

hinzugefügt wurde. Oder Sie drucken es einfach, ohne dass eine Umwandlung erforderlich ist. +1 –

+1

@PeterLawrey True, aber das würde nur funktionieren, wenn das OP das gesamte Element drucken möchte (wie beim Drucken von 'getIP() 'wie im Code-Snippet in der Frage). – Eran

+0

Ich dachte daran, dieselben Informationen hinzuzufügen, die Sie gerade hinzugefügt haben, +1 –

0

Wenn Sie Java8 + verwenden, könnten Sie findAny oder findOne verwenden ein Element aus der Sammlung abzurufen, wie unten

HTTPFormat element = (HTTPFormat) fh.getParsed().stream().findAny().orElse(defaultObject()); 

find* kehrt Optional Objekt, das sicher zu bedienen und Sie können passieren/default Element erhalten wenn die Sammlung leer ist.

, wenn Sie das erste Element benötigen Sie findFirst bei geordnete Sammlung verwenden

Verwandte Themen