Как получить только первые два стека фрейма из StackFrameStream? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть список 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,

Я просто хочу первые 3 элемента

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы также можете использовать IntStream для получения ограниченных объектов или объектов по определенным индексам.

статический диапазон IntStream (int startInclusive, int endExclusive)

Возвращает последовательно упорядоченный IntStream от startInclusive (включительно) до endInclusive (включительно) с шагом 1. 1. 1009 *

List< StackFrame > result = IntStream.range(0, 2).mapToObj(i-> stackFrameStream.get(i)).collect(Collectors.toList());
0 голосов
/ 29 декабря 2018

используйте limit для усечения:

 StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
        .walk(stackFrameStream -> stackFrameStream.limit(3).collect(Collectors.toList()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...