java - 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]
解决方案
将代码分成多行,调试起来会更容易。目前,串联的函数调用太多了,如果任何函数返回 null 都会抛出 NPE(例如,如果 allPbRequests.parallelStream() 返回 null,则会抛出 NPE)。
推荐阅读
- reactjs - React 应用程序变慢并且 JS Heap 变大。如何发现内存泄漏?
- c# - 如何读取文本文件中一行的一部分?
- c# - 如何将对象转换为类型?
- javascript - 从外部重新加载 vue 组件
- ios - ios: 将 pod 作为框架导入到 aswift ios 项目中,而不使用 cocoapods
- swift - SwiftUI 中的可选绑定
- python-3.x - 如何在python中删除Nan值?
- python-3.x - 对于共享 IP 地址的多个 Flask 站点,Certbot 证书在 Apache 上不起作用
- typescript - 使用列表和对象作为 Typescript 中的参数覆盖函数
- c++ - C++:使用 Stroustrup 示例生成随机数?