Усечение списка заданному числу элементов

Какой метод усекает список - например, к первым 100 элементам - отбрасывание других (без повторения через отдельные элементы)?

Ответ 1

Используйте 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 );
  }
}

Вы должны помнить, что subList возвращает представление элементов, поэтому, если вы хотите, чтобы остальная часть списка имела право на сбор мусора, вы должны скопировать элементы, которые вы хотите, в новый List:

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

Если список короче указанного размера, ожидайте за пределами exception. Выберите минимальное значение желаемого размера и текущий размер списка в качестве конечного индекса.

Наконец, обратите внимание, что второй аргумент должен быть больше, чем последний желаемый индекс.

Ответ 2

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

или

list.subList(0, 100);

Ответ 3

subList, как предлагается в других ответах, является первым, что приходит на ум. Я бы также предложил потоковый подход.

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

Ответ 4

В java 9 альтернативный способ:

Stream.iterate(0, i -> i < numOfElements, i -> i + 1).map(i -> yourList.get(i))