valores una ultimo primer obtener mostrar lista elementos elemento java collections iterable

una - obtener elemento arraylist java



Java: obtener el primer elemento de una colección (11)

Depende totalmente de la implementación que haya utilizado, ya sea una lista enlazada de lista de reproducción, u otras implementaciones de conjunto.

si está configurado, entonces puede obtener directamente el primer elemento, su puede ser un bucle de truco sobre la colección, crear una variable de valor 1 y obtener un valor cuando el valor del indicador es 1 después de esa ruptura de ese bucle.

Si es la implementación de la lista, entonces es fácil definiendo el número de índice.

Si tengo una colección, como la Collection<String> strs , ¿cómo puedo sacar el primer artículo? Simplemente podría llamar a un Iterator , tomar el primer next() y luego tirar el Iterator . ¿Hay una manera menos derrochadora de hacerlo?


En Java 8 tiene muchos operadores para usar, por ejemplo, límite

/** * Operator that limit the total number of items emitted through the pipeline * Shall print * [1] * @throws InterruptedException */ @Test public void limitStream() throws InterruptedException { List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 2, 3) .stream() .limit(1) .collect(toList()); System.out.println(list); }


En java 8:

Optional<String> firstElement = collection.stream().findFirst();

Para versiones anteriores de java, hay un método getFirst en Guava Iterables :

Iterables.getFirst(iterable, defaultValue)


Guava proporciona un Collector onlyElement , pero solo onlyElement si espera que la colección tenga exactamente un elemento.

String strz[] = strs.toArray(String[strs.size()]); String theFirstOne = strz[0];

Si no está seguro de cuántos elementos hay, use findFirst .

Optional<String> optionalString = collection.stream().findFirst();


No hay tal cosa como "primer" elemento en una Collection porque es ... bueno, simplemente una colección.

Desde el método Collection.iterator() del documento Java:

No hay garantías sobre el orden en que se devuelven los elementos ...

Así que no puedes.

Si usa otra interfaz como Lista , puede hacer lo siguiente:

String first = strs.get(0);

Pero directamente de una Colección esto no es posible.


Parece que esa es la mejor manera de hacerlo:

String first = strs.iterator().next();

Gran pregunta ... Al principio, parece ser un descuido de la interfaz de la Collection .

Tenga en cuenta que "primero" no siempre devolverá lo primero que coloque en la colección, y puede que solo tenga sentido para las colecciones ordenadas. Tal vez es por eso que no hay una llamada de get(item) , ya que la orden no se mantiene necesariamente.

Si bien puede parecer un poco inútil, puede que no sea tan malo como crees. El Iterator realmente solo contiene información de indexación en la colección, no una copia de toda la colección. Invocar este método crea una instancia del objeto Iterator , pero esa es realmente la única sobrecarga (no es como copiar todos los elementos).

Por ejemplo, mirando el tipo devuelto por el método ArrayList<String>.iterator() , vemos que es ArrayList::Itr . Esta es una clase interna que solo accede directamente a los elementos de la lista, en lugar de copiarlos.


Parece que su colección quiere ser como una lista, así que sugiero:

List<String> myList = new ArrayList<String>(); ... String first = myList.get(0);


Podrías hacer esto:

String strz[] = strs.toArray(String[strs.size()]); String theFirstOne = strz[0];

El javadoc para la colección proporciona la siguiente orden de advertencia de los elementos de la matriz:

Si esta colección ofrece alguna garantía en cuanto al orden en que sus elementos son devueltos por su iterador, este método debe devolver los elementos en el mismo orden.


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:

Collection<String> getStrings();

Y después de invocarlo, necesitas el primer elemento, puedes hacerlo así:

List<String> listString = (List) getStrings(); String firstElement = (listString.isEmpty() ? null : listString.get(0));


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 tendrá que usarlas.