将列表截断为给定数量的元素

时间:2009-08-14 18:39:11

标签: java collections

什么方法截断列表 - 例如前100个元素 - 丢弃其他元素(不迭代单个元素)?

3 个答案:

答案 0 :(得分:125)

使用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会返回项目的视图,因此如果您希望列表的其余部分符合垃圾回收的条件,则应将所需的项目复制到新的{{1 }}:

List

如果列表短于指定的大小,则预计会超出范围exception。选择所需大小的最小值和列表的当前大小作为结束索引。

最后,请注意第二个参数应该比最后一个所需的索引多一个。

答案 1 :(得分:50)

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

或:

list.subList(0, 100);

答案 2 :(得分:2)

正如其他答案中所建议的,

subList是第一个想到的。我也建议使用stream approach

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