2012-07-30 10 views
9

Voglio ottenere l'oggetto di una raccolta che conosco ha esattamente un elemento (in pratica è il contrario di ciò che fa Collections.singletonList() - ma non so se la raccolta è lista/set/qualcos'altro quindi non posso usare c.get(0)).Ottenere l'oggetto di una collezione singleton

Attualmente io uso c.iterator.next(), chiedo se c'è già un metodo per che in Java o una delle librerie comuni (apache-commons, guava, ecc)

risposta

7

Iterables.getOnlyElement() (o Iterables.getFirst(), se la raccolta può essere vuota) da Guava.

+0

A partire dal 2016/9/16 il link è rotto. Utilizza https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Iterables.html – Beethoven

3

La firma di metodo ed il JavaDoc dicono chiaramente si tratta di un List.

Questa è la firma:

public static <T> List<T> singletonList(T o) 

e questo è il JavaDoc:

restituisce una lista immutabile che contiene solo l'oggetto specificato. L'elenco restituito è serializzabile.

Quindi, questo significa che è possibile utilizzare semplicemente:

List<MyClass> singleton = Collections.singletonList(myObject); 
MyClass obj = singleton.get(0); 

Ow, ora vedo che cosa vuoi dire. Devo ammettere che la tua domanda era chiara. Ma per uno o un altro motivo, non ho capito :)

+3

Il PO non è in realtà utilizzando 'singletonList'. Vogliono il contrario di ciò che fa: estrae l'elemento da qualsiasi 'Collezione'. –

+0

David ha ragione, scusate se non l'ho spiegato abbastanza chiaramente – Alex

1

Con Java 8 si può fare:

collection.stream().findAny().get(); 
+0

Sarebbe interessante vedere un benchmark di questa soluzione contro 'collection.iterator() .Next() ' – Beethoven

Problemi correlati