我在StackFrames
上使用walk
方法获得了StackFrameStream
的列表。
但是我只需要找到前3个stackFrames。
我有StackFrameStream通过
List<StackFrame> stackFrameList =
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk(stackFrameStream -> stackFrameStream.collect(Collectors.toList()));
System.out.println("All frames : \n" + stackFrameList.toString());
for (StackFrame stackFrame : stackFrameList) {
System.out.println("stackFrame.getDeclaringClass()=>" + stackFrame.getDeclaringClass().toString());
System.out.println("stackFrame.getLineNumber=>" + stackFrame.getLineNumber());
System.out.println("stackFrame.getMethodName=>" + stackFrame.getMethodName());
System.out.println();
}
我不想使用stackFrameStream.collect(Collectors.toList())
并获取整个stackFrames列表,
我只想要前三个元素
答案 0 :(得分:2)
使用limit
截断:
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
.walk(stackFrameStream -> stackFrameStream.limit(3).collect(Collectors.toList()));
答案 1 :(得分:2)
您还可以使用IntStream
来获取受限对象或特定索引处的对象。
静态IntStream范围(int startInclusive,int endExclusive)
以1的增量步将顺序有序的IntStream从startInclusive(包括)返回到endInclusive(包括)。
List< StackFrame > result = IntStream.range(0, 2).mapToObj(i-> stackFrameStream.get(i)).collect(Collectors.toList());