2012-07-30 19 views
9

Quiero obtener el objeto de una colección que sé que tiene exactamente un elemento (básicamente es lo contrario de lo que Collections.singletonList() hace, pero no sé si la colección es list/set/algo más, así que no puedo usar c.get(0)).Obteniendo el objeto de una colección singleton

Actualmente utilizo c.iterator.next(), se preguntan si ya existe un método para que en Java o en una de las bibliotecas comunes (Apache-Commons, guayaba etc.)

Respuesta

7

Iterables.getOnlyElement() (o Iterables.getFirst(), si la recolección puede estar vacía) de Guava.

+0

A partir del 16/9/16, el enlace está roto. Use https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Iterables.html – Beethoven

3

La firma del método y de la JavaDoc decir claramente que es una List.

Esta es la firma:

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

Y este es el JavaDoc:

Devuelve una lista inmutable que contiene sólo el objeto especificado. La lista devuelta es serializable.

Por lo tanto, esto significa que se puede utilizar simplemente:

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

Ay, ahora veo lo que quieres decir. Debo admitir que tu pregunta fue clara. Pero por una u otra razón, no entendí :)

+3

El PO no es en realidad el uso de 'singletonList'. Quieren el reverso de lo que hace: extraer el elemento de cualquier 'Colección'. –

+0

David tiene razón, lo siento si no lo explicaba con suficiente claridad – Alex

1

Con Java 8 que puede hacer:

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

Sería interesante ver un punto de referencia de esta solución contra 'collection.iterator() .next() ' – Beethoven

Cuestiones relacionadas