Respuestas:
Utilizar 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 );
}
}
Debe tener en cuenta que subList
devuelve una vista de los elementos, por lo que si desea que el resto de la lista sea elegible para la recolección de basura, debe copiar los elementos que desea a un nuevo List
:
List<String> subItems = new ArrayList<String>(items.subList(0, 2));
Si la lista es más corta que el tamaño especificado, espere una excepción fuera de los límites . Elija el valor mínimo del tamaño deseado y el tamaño actual de la lista como índice final.
Por último, tenga en cuenta que el segundo argumento debe ser uno más que el último índice deseado.
Stream.limit
debería hacer el truco ( docs.oracle.com/javase/8/docs/api/java/util/stream/… )
list.subList(100, list.size()).clear();
o:
list.subList(0, 100);
list = list.subList(0, 100)
subList(100, list.size()).clear()
solo funcionará si list tiene implementado su método claro, por ejemplo, si crea list
por List<String> list = Arrays.asList(someString.split(","));
clear () arrojará UnsupportedOperationException
ya list
que será un resumen List
.
list.subList(n, list.size()).clear();
subList
, como se sugiere en las otras respuestas, es lo primero que me viene a la mente. También sugeriría un enfoque de flujo .
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