Kürzt eine Liste auf eine bestimmte Anzahl von Elementen

Lesezeit: 2 Minuten

Benutzer-Avatar
Sam

Welche Methode kürzt eine Liste – zum Beispiel auf die ersten 100 Elemente – und verwirft die anderen (ohne einzelne Elemente zu durchlaufen)?

Benutzer-Avatar
Ben Ling

Verwenden List.subList:

import java.util.*;
import static java.lang.Math.min;

public class T {
  public static void main( String args[] ) {
    List<String> items = Arrays.asList("1");
    List<String> subItems = items.subList(0, min(items.size(), 2));

    // Output: [1]
    System.out.println( subItems );

    items = Arrays.asList("1", "2", "3");
    subItems = items.subList(0, min(items.size(), 2));

    // Output: [1, 2]
    System.out.println( subItems );
  }
}

Das sollten Sie bedenken subList gibt eine Ansicht der Elemente zurück. Wenn Sie also möchten, dass der Rest der Liste für die Garbage Collection geeignet ist, sollten Sie die gewünschten Elemente in eine neue kopieren List:

List<String> subItems = new ArrayList<String>(items.subList(0, 2));

Wenn die Liste kürzer als die angegebene Größe ist, erwarten Sie ein Out-of-Bounds Ausnahme. Wählen Sie als Endindex den Mindestwert der gewünschten Größe und die aktuelle Größe der Liste.

Beachten Sie schließlich, dass das zweite Argument eins mehr sein sollte als der letzte gewünschte Index.

  • Während die Frage nicht ganz klar ist, klingt es so, als ob Sam ein Ende der Liste löschen möchte. Daher sollte Ihre Antwort eine list.clear() enthalten.

    – MP.

    14. August 2009 um 23:15 Uhr

  • Dies wird wahrscheinlich nicht so gut funktionieren wie die Lösung von karim79, die die beste Alternative ist – sie hat die besten Chancen auf eine gute Leistung und ist auch der sauberste Code.

    – Lawrence Dol

    15. August 2009 um 5:08 Uhr

  • Ich denke, es hängt von der Anzahl der zu entfernenden Elemente ab (und auch davon, ob die Liste Änderungen unterstützt).

    – Ben Lings

    15. August 2009 um 6:50 Uhr

  • Wenn Java 8 eine Option ist, denke ich Stream.limit sollte den Trick machen (docs.oracle.com/javase/8/docs/api/java/util/stream/…)

    – Eran Medan

    31. Juli 2017 um 22:38 Uhr

Benutzer-Avatar
karim79

list.subList(100, list.size()).clear();

oder:

list.subList(0, 100);

  • Die erste Option ändert die Liste, die zweite nicht. Es sollte sein list = list.subList(0, 100)

    – nessa.gp

    4. April 2016 um 15:00 Uhr

  • Beachte das auch subList(100, list.size()).clear() funktioniert nur, wenn list seine clear-Methode implementiert hat, zum Beispiel if you create list durch List<String> list = Arrays.asList(someString.split(",")); clear() wird werfen UnsupportedOperationException seit list wird ein Abstract sein List.

    – Guri

    14. Oktober 2016 um 18:16 Uhr


  • Wenn Sie die anfänglichen n Elemente der Liste beibehalten möchten, sollte dies der Fall sein list.subList(n, list.size()).clear();

    – Arefe

    1. Oktober 2018 um 5:16 Uhr

  • Schade, dass Sie ein Objekt erstellen müssen, nur um eine Liste zu verkürzen

    – David Bradley

    24. Oktober 2018 um 20:13 Uhr

  • @DavidBradley Stimmt, aber HotSpot kann dies tatsächlich optimieren

    – Stefan Reich

    8. November 2019 um 0:01 Uhr

subList, wie in den anderen Antworten vorgeschlagen, ist das erste, was mir in den Sinn kommt. Ich würde auch eine vorschlagen Stream-Ansatz.

source.stream().limit(10).collect(Collectors.toList()); // truncate to first 10 elements
source.stream().skip(2).limit(5).collect(Collectors.toList()); // discards the first 2 elements and takes the next 5

1332960cookie-checkKürzt eine Liste auf eine bestimmte Anzahl von Elementen

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

Privacy policy