Javascript 调试Java stream()NullPointerException原因的最佳方法

Javascript 调试Java stream()NullPointerException原因的最佳方法,javascript,java,rest,stream,resttemplate,Javascript,Java,Rest,Stream,Resttemplate,在Java中,我有以下代码: return new RestTemplate().getForObject("https://images-api.nasa.gov/search?q=finger", CollectionWrapper.class) .getCollection() .getItems().stream() .map(Item::getLinks) .flatMap(List::stream) .filter(link-> "pre

在Java中,我有以下代码:

return new RestTemplate().getForObject("https://images-api.nasa.gov/search?q=finger", CollectionWrapper.class)
    .getCollection()
    .getItems().stream()
    .map(Item::getLinks)
    .flatMap(List::stream)
    .filter(link-> "preview".equals(link.getRel()))
    .map(Link::getHref)
    .collect(Collectors.toList());
它抛出一个NullPointerException,并显示以下错误消息:

java.lang.NullPointerException: null
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
    at [... MyController.java]
我的问题 使用Java开发人员的常用工具调试此NPE原因的最佳/最简单/最快方法是什么

到目前为止,我的最佳解决方案 用JavaScript重写代码并在任何浏览器DevTools JS控制台中运行

fetch("https://images-api.nasa.gov/search?q=finger").then(data => data.json()).then(data => {
    const result = data
        .collection
        .items
        .map(item => item.links)
        .flat()
        .filter(link => link.rel === "preview")
        .map(link => link.href)

    console.log(result)
})
在Chrome的JS控制台中,这给了我

VM704:7 Uncaught (in promise) TypeError: Cannot read property 'rel' of undefined
    at <anonymous>:7:22
    at Array.filter (<anonymous>)
    at <anonymous>:7:2
换句话说,我正在尝试访问筛选器中缺少的链接项的rel属性。如果我首先过滤掉所有没有链接的item元素,那么我的代码在Java和JavaScript中都能正常运行


但是如何在不复制和运行JavaScript代码的情况下快速找到原因呢

通常,您可以使用peek方法打印流或对流执行一些调试。它的工作方式与foreach类似,但它返回的是流而不是void。但实际上,每当您试图访问列表的元素时,您都应该声明列表不是空的,在您的情况下,您可以使用filter来过滤空列表。

我不知道peek。非常感谢。您是否有一个具体的想法,如何以一种有用的方式使用它来调试我上面描述的那种情况?好吧,我认为您案例中的NPE来自这一行`.filterlink=>link.rel==preview。这肯定是因为链接为空。所以你可以添加peek`来打印任何空元素。很抱歉这么密集,但你能给我一个例子,说明如何使用peek打印空元素吗?