我在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列表,

我只想要前三个要素

最佳答案

使用limit截断:

 StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
        .walk(stackFrameStream -> stackFrameStream.limit(3).collect(Collectors.toList()));

08-06 17:59