我想要迭代一个堆栈跟踪信息。 堆栈跟踪信息由throwable组成,其getCause()返回下一个throwable。最后一次调用getCause()返回null。(例如:a -> b -> null)
我尝试使用Stream.iterable(),但结果是NullPointerException,因为iterable中的元素不能为null。 这是问题的简短演示:
public void process() {
Throwable b = new Throwable();
Throwable a = new Throwable(b);
Stream.iterate(a, Throwable::getCause).forEach(System.out::println);
}
我目前正在使用 while 循环手动创建一个集合:
public void process() {
Throwable b = new Throwable();
Throwable a = new Throwable(b);
List<Throwable> list = new ArrayList<>();
Throwable element = a;
while (Objects.nonNull(element)) {
list.add(element);
element = element.getCause();
}
list.stream().forEach(System.out::println);
}
有没有更好的方法(更短、更功能强大)来实现这个目标?
List
。 - AJNeufeld