Fra*_*ire 1 java nullpointerexception java-8 java-stream
从流中收集数据时,我遇到了一个令人讨厌的NullPointerException。在我看来,我不应该得到一个,这就是困扰我的地方。
这是错误的代码:
descriptiveData
.stream()
.map(Signaletiques::getContrats)
.filter(Objects::nonNull)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
descriptiveData不为null,并且不包含任何null对象,但是getContrats的结果可能是。这是一个非常有效的商业情况,我认为使用过滤器来处理它是解决问题的方法,但我所能得到的只是这个异常:
原因:java.util.stream.ReferencePipeline $ 3 $ 1.accept(ReferencePipeline.java:193)处的java.lang.NullPointerException java.util.stream处的java.util.ArrayList $ ArrayListSpliterator.tryAdvance(ArrayList.java:1351) .ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)at java.util。 java.util.stream.FindOps $ FindOp.evaluateSequential(FindOps.java:152)的java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)的stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) .util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)位于be.formatech.forhrm.appipay.synchrosignaletique.service.impl。SynchronisationAppipayUcmIdFetcherImpl.searchWorkerIdThroughContractsData(SynchronisationAppipayUcmIdFetcherImpl.java:141)`
知道这可能来自什么吗?
编辑:
我真的很抱歉 !
我在descriptiveData列表中确实有一个空值,但是IntelliJ并未显示它:

感谢@Nikolas提供的答案确实正确。
的descriptiveData的确不包含null价值-这可能是以后添加。然后,您还需要过滤掉这些null值。只需.filter(..)在该.map(..)行之前添加另一个:
descriptiveData
.stream()
.filter(Objects::nonNull)
.map(Signaletiques::getContrats)
.filter(Objects::nonNull)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |