Wie bekomme ich das erste Element der Liste oder des Sets? [duplicate]

Lesezeit: 5 Minuten

Benutzer-Avatar
Benutzer496949

Ich würde gerne wissen, ob ich das erste Element einer Liste oder eines Satzes erhalten kann. Welche Methode verwenden?

  • Set hat kein erstes Element. Für Liste: list.get(0);

    – Piotr Gwiazda

    16. Januar 2012 um 15:40 Uhr


  • Was hast du, eine Liste oder ein Set? Sets müssen nicht unbedingt in einer bestimmten Reihenfolge sein …

    – NominSim

    16. Januar 2012 um 15:40 Uhr

  • Einige Sets werden bestellt, wie z TreeSet.

    – Steve Kuo

    16. Januar 2012 um 20:12 Uhr

  • Auch ein Set mit exakt ein Element hat ein “erstes” Element.

    – Magnilex

    23. Januar 2017 um 15:42 Uhr

  • Versuchen CollectionUtils.get(Object,index) aus Apache Commons Bibliothek. Bezug hier

    – Diablo

    12. Dezember 2017 um 15:17 Uhr


Benutzer-Avatar
Stapler

Siehe javadoc

von Aufführen

list.get(0);

oder Satz

set.iterator().next();

und überprüfen Sie die Größe, bevor Sie die obigen Methoden durch Aufrufen verwenden isEmpty()

!list_or_set.isEmpty()

  • Verwenden isEmpty() Anstatt von size()>0. Es zeigt Ihre Absicht besser und ist möglicherweise effizienter (z. B. LinkList size() ist O(n)).

    – Steve Kuo

    16. Januar 2012 um 20:10 Uhr


  • @SteveKuo LinkedList hat eine Größenvariable, also ist size() O(1). Zusätzlich wird isEmpty() als size() == 0 implementiert.

    – efritz

    10. Mai 2014 um 22:49 Uhr

  • Verwenden Sie immer List.iterator().next() oder Set.iterator().next() Um O(N) für verknüpfte Datenstrukturen zu vermeiden, wissen Sie nie, welche Implementierung Sie erhalten, und überprüfen dies natürlich durch Verwendung Set.isEmpty() oder List.isEmpty() aus dem gleichen Grund wird für beide Fälle immer O(1) anstelle eines potentiellen O(N) sein, wenn wiederum eine Implementierung einer verknüpften Datenstruktur wie gewünscht übergeben wird LinkedList oder LinkedHashSet

    – Guido Medina

    11. Mai 2015 um 15:51 Uhr

  • Dies sollte die akzeptierte Antwort sein, obwohl sie nicht zu ausführlich ist, aber die genaueste Antwort gibt und perfekt funktioniert!

    – Arturas M

    9. September 2016 um 8:55 Uhr

Collection c;

Iterator iter = c.iterator();

Object first = iter.next();

(Dies kommt dem “ersten” Element von a am nächsten Set. Sie sollten sich darüber im Klaren sein, dass es für die meisten Implementierungen von absolut keine Bedeutung hat Set. Dies kann für LinkedHashSet und TreeSet von Bedeutung sein, aber nicht für HashSet.)

  • nützlich, wenn Sie einfach so schnell wie möglich etwas aus dem Set bekommen möchten

    – HaydenKai

    13. September 2016 um 23:10 Uhr

  • Gut genug, wenn Ihr Set nur ein Element hat.

    – Milosmen

    15. September 2017 um 15:02 Uhr

  • Sammlung c; c.iterator().next();

    – Faseela Thayattuchira

    14. Januar 2021 um 8:10 Uhr


Benutzer-Avatar
Sonson123

In Java >=8 können Sie auch die Streaming-API verwenden:

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

(Nützlich, wenn Set/List möglicherweise leer ist.)

  • Das sieht toll aus, aber ohne get() könnte ich keine resultierenden elementspezifischen Methoden aufrufen.set.stream().findFirst().get() ermöglicht es Ihnen, beliebige Methoden für das resultierende Objekt aufzurufen. z.B:set.stream().findFirst().get().getMessage()

    – Diablo

    14. Juli 2016 um 11:26 Uhr

  • @Diablo Sei aber vorsichtig, denn get() löst eine Ausnahme aus, wenn das optionale Feld leer ist. Es gibt viele andere Methoden auf Optional das wäre vielleicht besser geeignet.

    – Magnilex

    28. Februar 2017 um 8:06 Uhr

  • Wenn Sie möchten, dass es null zurückgibt, tun Sie es einfach String first = set.stream().findFirst().orElse(null);

    – Troosan

    29. Januar 2018 um 14:27 Uhr


  • @troosan Dies ist immer noch nicht nullsicher, da das erste Element des Satzes sein kann nullin welchem ​​Fall findFirst() wird NPE werfen. Der nullsichere Weg besteht darin, Folgendes zu verwenden: set.stream().map(Optional::ofNullable).findFirst().orElseGet(Optional::empty).orElse(null). Zuerst packen wir das erste Element des Streams in Optional, dann after findFirst() (was unser Optional in ein anderes Optional einwickelt) packen wir es wieder aus oder kehren zurück Optional.empty() wenn Set leer war. Dann geben wir schließlich das erste Element von Set oder null zurück.

    – Ruslan Stelmachenko

    12. März 2018 um 18:28 Uhr


  • @djxak in der Tat haben Sie Recht, Ihr Vorschlag ist natürlich sicherer, wenn Sie nicht sicher sind, was das Set enthält (und welche Implementierung des Sets verwendet wird).

    – Troosan

    14. März 2018 um 10:52 Uhr

Benutzer-Avatar
Ch Vas

Nehmen wir an, Sie haben eine List<String> strings von dem Sie das erste Element haben möchten.

Dazu gibt es mehrere Möglichkeiten:

Java (vor 8):

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

Java 8:

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

Guave

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

Apache Commons (4+)

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

Apache Commons (vor 4)

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

Gefolgt von oder eingekapselt in die entsprechenden Checks oder Try-Catch-Blöcke.

Kotlin:

In Kotlin beides Arrays und die meisten Sammlungen (zB: Liste) haben a first Methodenaufruf. Ihr Code würde also in etwa so aussehen

für eine Liste:

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

für ein Array:

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

Gefolgt von oder eingekapselt in die entsprechenden Checks oder Try-Catch-Blöcke.

Kotlin bietet auch sicherere Möglichkeiten, dies zu tun kotlin.collectionszum Beispiel firstOderNull oder getOrElseoder getOrDefault beim Benutzen JRE8

Ich bin überrascht, dass noch niemand eine Guave-Lösung vorgeschlagen hat:

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)

oder wenn Sie ein einzelnes Element erwarten:

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

Benutzer-Avatar
Yassin Hajaj

java8 und mehr

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

Dies hilft Ihnen, das erste Element der Liste oder Menge abzurufen. Da die Menge oder Liste nicht leer ist (get() auf leer optional wird werfen java.util.NoSuchElementException)

orElse() kann verwendet werden als: (Dies ist nur eine Problemumgehung – nicht empfohlen)

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

Nachfolgend finden Sie die geeignete Vorgehensweise:

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

Auf ähnliche Weise kann das erste Element der Liste abgerufen werden.

Hoffe das hilft.

Benutzer-Avatar
Wassil Waltschew

Satz

set.toArray()[0];

Aufführen

list.get(0);

  • set.toArray()[0] muss den gesamten Satzinhalt durchlaufen, um ein Array zu erstellen, um nur das erste Element zu erhalten, was nicht sehr effektiv ist.

    – pedro

    13. Mai 2016 um 16:12 Uhr

  • dies führt zu einer sehr geringen Leistung

    – ZetaPR

    6. April 2017 um 16:50 Uhr

  • Für eine Menge gibt diese Methode an zurück Object und nicht die Art des Elements in der Set.

    – Paulus

    22. Februar 2018 um 18:50 Uhr

1360540cookie-checkWie bekomme ich das erste Element der Liste oder des Sets? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy