Получение неожиданного исключения NullPointerException при сборе результатов потока - PullRequest
0 голосов
/ 29 мая 2018

Я получаю раздражающее исключение NullPointerException при сборе данных из потока.По моему мнению, я не должен получить один, и это то, что беспокоит меня.

Вот неправильный код:

descriptiveData
    .stream()
    .map(Signaletiques::getContrats)
    .filter(Objects::nonNull)
    .collect(Collectors.toList())

descriptiveData не является нулевым и не содержит нулевых объектов , но результаты getContrats могут быть.Это вполне допустимая бизнес-ситуация, и я подумал, что обработать ее с помощью фильтра - это способ сделать это, но все, что я могу получить, это исключение:

Причина: java.lang.NullPointerException в java.util.stream.ReferencePipeline $ 3 $ 1.accept (ReferencePipeline.java:193) в java.util.ArrayList $ ArrayListSpliterator.tryAdvance (ArrayList.java:1351) в java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.j::12) atjava.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:498) в java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485) в java.util.stream.AbstractPipeline.wrapAndCopyIntoj:47)в java.util.stream.FindOps $ FindOp.evaluateSequential (FindOps.java:152) в java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234) в java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java: 464) at be.formatech.forhrm.appipay.synchrosignaletique.service.impl.SynchronisationAppipayUcmIdFetcherImpl.searchWorkerIdThroughContractsData (SynchronisationAppipayUcmIdFetcherImpl.java:141) `

Есть идеи?

РЕДАКТИРОВАТЬ:

Мне очень жаль!

У меня действительно был нуль в списке descriptiveData, но IntelliJ не отображал его: enter image description here

Спасибо @Nikolas за действительно правильный ответ.

1 Ответ

0 голосов
/ 29 мая 2018

descriptiveData действительно содержит значение null - они могут быть добавлены позже.Затем вам нужно отфильтровать эти null значения.Просто добавьте еще .filter(..) перед строкой .map(..):

descriptiveData
    .stream()
    .filter(Objects::nonNull)
    .map(Signaletiques::getContrats)
    .filter(Objects::nonNull)
    .collect(Collectors.toList())
...