Należy pamiętać, że subListzwraca widok elementów, więc jeśli chcesz, aby reszta listy kwalifikowała się do wyrzucania elementów bezużytecznych, skopiuj żądane elementy do nowego List:
Jeśli lista jest krótsza niż określony rozmiar, spodziewaj się wyjątku poza zakresem . Wybierz minimalną wartość żądanego rozmiaru i aktualny rozmiar listy jako indeks końcowy.
Na koniec zwróć uwagę, że drugi argument powinien być o jeden większy niż ostatni pożądany indeks.
chociaż pytanie nie jest do końca jasne, wygląda na to, że Sam chce usunąć koniec listy. Dlatego twoja odpowiedź powinna zawierać list.clear ().
mP.
To raczej nie będzie działać tak dobrze jak rozwiązanie karim79, które jest najlepszą alternatywą - ma największe szanse na dobre działanie i jest również najczystszym kodem.
Lawrence Dol
Myślę, że zależy to od liczby elementów do usunięcia (a także od tego, czy lista obsługuje modyfikację)
Pierwsza opcja modyfikuje listę, a druga nie. Powinno byćlist = list.subList(0, 100)
nessa.gp
3
Zauważ również, że subList(100, list.size()).clear()zadziała tylko wtedy, gdy lista ma zaimplementowaną metodę clear, na przykład jeśli utworzysz listprzez List<String> list = Arrays.asList(someString.split(","));clear (), wyrzuci, UnsupportedOperationExceptionponieważ listbędzie abstrakcyjny List.
Gyuri,
Jeśli chcesz zachować początkowe n elementów listy, powinno to byćlist.subList(n, list.size()).clear();
Chaklader Asfak Arefe
1
Szkoda, że musisz stworzyć obiekt tylko po to, aby skrócić listę
David Bradley
1
@DavidBradley Prawda, ale HotSpot może to zoptymalizować
Stefan Reich
8
subList, jak sugerowano w innych odpowiedziach, jest pierwszą, która przychodzi na myśl. Sugerowałbym również podejście strumieniowe .
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
Stream.limit
powinno załatwić sprawę ( docs.oracle.com/javase/8/docs/api/java/util/stream/… )lub:
źródło
list = list.subList(0, 100)
subList(100, list.size()).clear()
zadziała tylko wtedy, gdy lista ma zaimplementowaną metodę clear, na przykład jeśli utworzyszlist
przezList<String> list = Arrays.asList(someString.split(","));
clear (), wyrzuci,UnsupportedOperationException
ponieważlist
będzie abstrakcyjnyList
.list.subList(n, list.size()).clear();
subList
, jak sugerowano w innych odpowiedziach, jest pierwszą, która przychodzi na myśl. Sugerowałbym również podejście strumieniowe .źródło