¿Cómo obtener el primer elemento de la Lista o Conjunto? [duplicate]

6 minutos de lectura

avatar de usuario
usuario496949

Me gustaría saber si puedo obtener el primer elemento de una lista o conjunto. ¿Qué método usar?

  • El conjunto no tiene primer elemento. Para Lista: list.get(0);

    –Piotr Gwiazda

    16 de enero de 2012 a las 15:40


  • ¿Qué tienes, una lista o un conjunto? Los conjuntos pueden no estar necesariamente en un orden particular…

    – NominSim

    16 de enero de 2012 a las 15:40

  • Algunos conjuntos están ordenados, tales TreeSet.

    –Steve Kuo

    16 de enero de 2012 a las 20:12

  • Además, un conjunto con exactamente un elemento tiene un “primer” elemento.

    – Magnilex

    23 de enero de 2017 a las 15:42

  • Probar CollectionUtils.get(Object,index) de comunes apache biblioteca. Referencia aquí

    – Diablo

    12 de diciembre de 2017 a las 15:17


avatar de usuario
apilador

ver el javadoc

de Lista

list.get(0);

o Establecer

set.iterator().next();

y verifique el tamaño antes de usar los métodos anteriores invocando isEmpty()

!list_or_set.isEmpty()

  • Usar isEmpty() en vez de size()>0. Muestra mejor su intención y posiblemente sea más eficiente (por ejemplo, LinkList size() es O(n)).

    –Steve Kuo

    16 de enero de 2012 a las 20:10


  • @SteveKuo LinkedList tiene una variable de tamaño, por lo que size() es O(1). Además, isEmpty() se implementa como size() == 0.

    – efritz

    10 mayo 2014 a las 22:49

  • Siempre usa List.iterator().next() o Set.iterator().next() para evitar O(N) para las estructuras de datos vinculados, nunca se sabe qué implementación recibirá y, por supuesto, verifique mediante el uso Set.isEmpty() o List.isEmpty() por la misma razón, para ambos casos siempre será O(1) en lugar de un potencial O(N) si, de nuevo, se pasa como una implementación de la estructura de datos Linked LinkedList o LinkedHashSet

    –Guido Medina

    11 mayo 2015 a las 15:51

  • ¡Esta debería ser la respuesta aceptada, aunque no demasiado detallada, pero da la respuesta más precisa y funciona perfectamente!

    – Arturas M

    9 de septiembre de 2016 a las 8:55

Collection c;

Iterator iter = c.iterator();

Object first = iter.next();

(Esto es lo más cerca que estará de tener el “primer” elemento de un Set. Debe darse cuenta de que no tiene absolutamente ningún significado para la mayoría de las implementaciones de Set. Esto puede tener significado para LinkedHashSet y TreeSet, pero no para HashSet).

  • útil si solo desea obtener algo del conjunto, lo más rápido posible

    – HaydenKai

    13/09/2016 a las 23:10

  • Lo suficientemente bueno si su conjunto tiene solo un elemento.

    – milosmns

    15 de septiembre de 2017 a las 15:02

  • colección c; c.iterador().siguiente();

    – Faseela Thayattuchira

    14 de enero de 2021 a las 8:10


avatar de usuario
Sonson123

En Java> = 8 también puede usar la API de transmisión:

Optional<String> first = set.stream().findFirst();

(Útil si el Conjunto/Lista puede estar vacío).

  • Esto se ve muy bien, pero sin get () no podría llamar a los métodos específicos del elemento resultante.set.stream().findFirst().get() le permitirá llamar a cualquier método en el objeto resultante. p.ej:set.stream().findFirst().get().getMessage()

    – Diablo

    14 de julio de 2016 a las 11:26

  • @Diablo Pero ten cuidado, porque get() lanzará una excepción si el opcional está vacío. Hay muchos otros métodos en Optional que podría ser más adecuado.

    – Magnilex

    28 de febrero de 2017 a las 8:06

  • si quieres que devuelva nulo, solo hazlo String first = set.stream().findFirst().orElse(null);

    – troosan

    29 de enero de 2018 a las 14:27


  • @troosan Esto todavía no es seguro porque el primer elemento del conjunto puede ser nullen ese caso findFirst() lanzará NPE. La forma segura de nulos es usar algo como: set.stream().map(Optional::ofNullable).findFirst().orElseGet(Optional::empty).orElse(null). Primero, envolvemos el primer elemento de la secuencia en Opcional, luego, después findFirst() (que envuelve nuestro Opcional en otro Opcional) lo desenvolvemos o regresamos Optional.empty() si Set estuviera vacío. Luego, finalmente, devolvemos el primer elemento de Set o nulo.

    – Ruslán Stelmachenko

    12 de marzo de 2018 a las 18:28


  • @djxak, de hecho, tiene razón, su propuesta es, por supuesto, más segura si no está seguro de qué contiene el conjunto (y qué implementación del conjunto se usa)

    – troosan

    14/03/2018 a las 10:52

avatar de usuario
ch vas

Supongamos que tiene un List<String> strings del que desea obtener el primer elemento.

Hay varias maneras de hacer eso:

Java (antes de 8):

String firstElement = null;
if (!strings.isEmpty() && strings.size() > 0) {
    firstElement = strings.get(0);
}

Java 8:

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

Guayaba

String firstElement = Iterables.getFirst(strings, null);

Apache comunes (4+)

String firstElement = (String) IteratorUtils.get(strings, 0);

Apache commons (antes de 4)

String firstElement = (String) CollectionUtils.get(strings, 0);

Seguido o encapsulado dentro de los controles apropiados o bloques de prueba y captura.

Kotlin:

En Kotlin ambos arreglos y la mayoría de los Colecciones (por ejemplo: Lista) tienen un first llamada de método. Entonces tu código se vería así

para una lista:

val stringsList: List<String?> = listOf("a", "b", null)
val first: String? = stringsList.first()

para una matriz:

val stringArray: Array<String?> = arrayOf("a", "b", null)
val first: String? = stringArray.first()

Seguido o encapsulado dentro de los controles apropiados o bloques de prueba y captura.

Kotlin también incluye formas más seguras de hacerlo para kotlin.collectionspor ejemplo primero o nulo o getOrElseo getOrDefault cuando usas JRE8

Me sorprende que nadie haya sugerido la solución de guayaba todavía:

com.google.common.collect.Iterables.get(collection, 0)
// or
com.google.common.collect.Iterables.get(collection, 0, defaultValue)
// or
com.google.common.collect.Iterables.getFirst(collection, defaultValue)

o si espera un solo elemento:

com.google.common.collect.Iterables.getOnlyElement(collection, defaultValue)
// or
com.google.common.collect.Iterables.getOnlyElement(collection)

avatar de usuario
Yassin Hayaj

java8 y más

Set<String> set = new TreeSet<>();
    set.add("2");
    set.add("1");
    set.add("3");
    String first = set.stream().findFirst().get();

Esto le ayudará a recuperar el primer elemento de la lista o conjunto. Dado que el conjunto o lista no está vacío (get() en vacío opcional arrojará java.util.NoSuchElementException)

orElse() se puede usar como: (esto es solo una solución, no recomendado)

String first = set.stream().findFirst().orElse("");
set.removeIf(String::isEmpty);

A continuación se muestra el enfoque apropiado:

Optional<String> firstString = set.stream().findFirst();
if(firstString.isPresent()){
    String first = firstString.get();
}

Del mismo modo, se puede recuperar el primer elemento de la lista.

Espero que esto ayude.

avatar de usuario
vasil valchov

Establecer

set.toArray()[0];

Lista

list.get(0);

  • set.toArray()[0] tendrá que pasar por todo el contenido del conjunto para crear una matriz para obtener solo el primer elemento, lo cual no es muy efectivo.

    – pedro

    13 mayo 2016 a las 16:12

  • esto provocará un rendimiento muy bajo

    – Zeta PR

    06/04/2017 a las 16:50

  • Para un conjunto, este método devuelve un Object y no el tipo de elemento en el Set.

    – Pablo

    22 de febrero de 2018 a las 18:50

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad