Si tengo una colección, como Collection<String> strs
, ¿cómo puedo obtener el primer artículo? Podría llamar a un Iterator
, tomar el primero next()
y luego tirarlo Iterator
. ¿Hay una manera menos derrochadora de hacerlo?
java
collections
iterable
Nick Heiner
fuente
fuente
Respuestas:
Iterables.get (yourC, indexYouWant)
Porque realmente, si estás usando Colecciones, deberías estar usando Google Collections.
fuente
Parece que esa es la mejor manera de hacerlo:
Gran pregunta ... Al principio, parece un descuido de la
Collection
interfaz.Tenga en cuenta que "primero" no siempre devolverá lo primero que ponga en la colección, y solo puede tener sentido para las colecciones ordenadas. Quizás es por eso que no hay una
get(item)
llamada, ya que el orden no se conserva necesariamente.Si bien puede parecer un poco derrochador, puede que no sea tan malo como crees. El
Iterator
realmente solo contiene información de indexación en la colección, generalmente no es una copia de toda la colección. Invocar este método crea una instancia delIterator
objeto, pero esa es realmente la única sobrecarga (no como copiar todos los elementos).Por ejemplo, al observar el tipo devuelto por el
ArrayList<String>.iterator()
método, vemos que es asíArrayList::Itr
. Esta es una clase interna que solo accede a los elementos de la lista directamente, en lugar de copiarlos.Solo asegúrese de verificar el retorno de,
iterator()
ya que puede estar vacío onull
dependiendo de la implementación.fuente
En java 8:
Para versiones anteriores de Java, hay un método en GetFirst guayaba iterables :
fuente
getFirst
método disponible. Hayget
ygetLast
métodosNo hay tal cosa como el "primer" elemento en un
Collection
porque es ... bueno, simplemente una colección.Del método Collection.iterator () de Java doc :
Entonces no puedes.
Si usa otra interfaz como Lista , puede hacer lo siguiente:
Pero directamente desde una Colección esto no es posible.
fuente
get(int n)
se define paraCollection
Parece que su colección quiere ser como una lista, por lo que sugeriría:
fuente
En Java 8 tiene muchos operadores para usar, por ejemplo, límite
fuente
Guava proporciona una
onlyElement
Collector
, pero solo úsela si espera que la colección tenga exactamente un elemento.Si no está seguro de cuántos elementos hay, úselos
findFirst
.fuente
Puedes hacer un casting. Por ejemplo, si existe un método con esta definición, y sabe que este método está devolviendo una Lista:
Y después de invocarlo, necesita el primer elemento, puede hacerlo así:
fuente
Si sabe que la colección es una cola, puede convertirla en una cola y obtenerla fácilmente.
Hay varias estructuras que puede usar para obtener el pedido, pero deberá emitirlo.
fuente
Depende totalmente de la implementación que haya utilizado, ya sea la lista de listas enlazadas u otras implementaciones de set.
si está configurado, puede obtener directamente el primer elemento, puede ser un bucle engañoso sobre la colección, crear una variable de valor 1 y obtener un valor cuando el valor del indicador es 1 después de ese salto.
si es la implementación de la lista, entonces es fácil definiendo el número de índice.
fuente
Forma funcional:
fragmento de código anterior preservado de NullPointerException e IndexOutOfBoundsException
fuente
List<T>
no satisface la condición de que se debe trabajar para unaCollection<String>
, pero por supuesto que se puede fijar utilizandoCollection<T>
, con el cambio adicional:.map(Collection::stream)
.Podrías hacer esto:
El javadoc para Collection ofrece el siguiente orden de advertencia de los elementos de la matriz:
fuente