将链接的对象转换为流或集合
2022-09-02 11:35:24
我想迭代堆栈跟踪。堆栈跟踪由可抛出对象组成,其 getCause() 返回下一个可抛出对象。最后一次调用 getCause() 返回 null。(示例:a -> b -> null)
我尝试使用Stream.iterable()来生成NullPointerException,因为可迭代中的元素不能为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);
}
有没有更好的方法(更短,更实用)来实现这一目标?