Java 将列表截断为给定数量的元素
哪种方法会截断一个列表(例如前100个元素)而丢弃其他元素(不遍历单个元素) 或: 使用: 如果列表短于指定的大小,则超出范围。选择所需大小的最小值和列表的当前大小作为结束索引Java 将列表截断为给定数量的元素,java,collections,Java,Collections,哪种方法会截断一个列表(例如前100个元素)而丢弃其他元素(不遍历单个元素) 或: 使用: 如果列表短于指定的大小,则超出范围。选择所需大小的最小值和列表的当前大小作为结束索引 最后,请注意,第二个参数应该比最后一个所需的索引多出一个。子列表,正如其他答案中所建议的,是第一个想到的参数。我还建议采取一种新的做法 虽然问题并不十分清楚,但听起来山姆确实希望删除列表末尾的内容。因此,您的答案应该包括一个list.clear()。它的性能不太可能像karim79的解决方案那样好,karim79的解决方
最后,请注意,第二个参数应该比最后一个所需的索引多出一个。
子列表
,正如其他答案中所建议的,是第一个想到的参数。我还建议采取一种新的做法
虽然问题并不十分清楚,但听起来山姆确实希望删除列表末尾的内容。因此,您的答案应该包括一个list.clear()。它的性能不太可能像karim79的解决方案那样好,karim79的解决方案是最好的选择-它有最好的机会表现良好,也是最干净的代码。我认为这取决于要删除的元素的数量(如果列表支持修改),如果Java 8是一个选项,我认为
Stream.limit
应该起作用()第一个选项修改列表,而第二个选项不修改。它应该是list=list.subList(01100)
还要注意subList(100,list.size()).clear()
只有在list实现了它的clear方法时才会起作用,例如,如果您通过list list list=Arrays.asList(someString.split(“,”)创建list
clear()将抛出UnsupportedOperationException
,因为list
将是一个抽象的list
代码>你必须创建一个对象来缩短list@DavidBradley没错,但HotSpot实际上可能会对此进行优化
list.subList(100, list.size()).clear();
list.subList(0, 100);
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 );
}
}
List<String> subItems = new ArrayList<String>(items.subList(0, 2));
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