首页 > 解决方案 > Parallelstram.filter.collect 中的空指针异常

问题描述

我从下面的代码片段中得到 NPE。不确定哪个对象为空。

List<ProvisioningBrokerRequest> filteredPbRequests = allPbRequests.parallelStream().filter(
pbRequest -> pbRequest.getProvisioningRequest().getConfig().stream().anyMatch(
                config -> StringUtils.equals(uid, config.getUid()) && config.getTemplate() != null && !config
                    .getTemplate().isEmpty())).collect(Collectors.toList());

堆栈跟踪

java.lang.NullPointerException
        at com.provisioningbroker.impl.ProvisioningRequestServiceImpl.lambda$handleDeleteConnectorConfigCtlrEvent$1(ProvisioningRequestServiceImpl.java:336)[388:com..provisioning-broker-impl:18.1.1.417]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)[:1.8.0_151]
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380)[:1.8.0_151]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)[:1.8.0_151]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)[:1.8.0_151]
        at java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:747)[:1.8.0_151]
        at java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:721)[:1.8.0_151]
        at java.util.stream.AbstractTask.compute(AbstractTask.java:316)[:1.8.0_151]
        at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)[:1.8.0_151]
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)[:1.8.0_151]
        at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:401)[:1.8.0_151]
        at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734)[:1.8.0_151]
        at java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:714)[:1.8.0_151]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)[:1.8.0_151]
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)[:1.8.0_151]
       at com.provisioningbroker.impl.ProvisioningRequestServiceImpl.handleDeleteConnectorConfigCtlrEvent(ProvisioningRequestServiceImpl.java:338)[388:com.provisioning-broker-impl:18.1.1.417]

标签: javajava-8nullpointerexceptionjava-stream

解决方案


将代码分成多行,调试起来会更容易。目前,串联的函数调用太多了,如果任何函数返回 null 都会抛出 NPE(例如,如果 allPbRequests.parallelStream() 返回 null,则会抛出 NPE)。


推荐阅读