流:避免 NullPointerException

Ada*_*m D 2 java java-8

我必须获取数组的第一个元素。但该元素可能为空;如果元素为空,我将放置一个空字段(我正在尝试生成一个 pdf)

这是我现在的代码:

public void makePdf(Long id) throws IOException {
    Candidacy ca = candidacyRepository.findOne(id); 
    cos.beginText();

    cos.showText(
       ca.getInterviews().stream().map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0)!=null?ca.getInterviews().stream().map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0):"")); 

    cos.endText();
}
Run Code Online (Sandbox Code Playgroud)

所以我不想阻止pdf的生成。非常感谢您的支持!

更新

抱歉不够精确:我也按日期排序。

public void makePdf(Long id) throws IOException {
        Candidacy ca = candidacyRepository.findOne(id); 
        cos.beginText();

        cos.showText(
           ca.getInterviews().stream().sorted((a,b)-> a.getInterviewDate().compareTo(b.getInterviewDate())).sorted((a,f)->f.getInterviewDate().compareTo(a.getInterviewDate())).sorted((b,f)->b.getInterviewDate().compareTo(f.getInterviewDate())).map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0)!=null?ca.getInterviews().stream().sorted((a,b)-> a.getInterviewDate().compareTo(b.getInterviewDate())).sorted((a,f)->f.getInterviewDate().compareTo(a.getInterviewDate())).sorted((b,f)->b.getInterviewDate().compareTo(f.getInterviewDate())).map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0):"")); 

        cos.endText();
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个 NullPointerException:/ 谢谢你的帮助

Era*_*ran 6

这段代码没有意义。您正在执行相同的Stream管道两次,每次生成一个完整的管道List时,您只需要该管道的第一个元素List

您可以使用findFirst来获取Stream.

编辑 :

在测试了我原来的答案后,结果发现它不起作用。如果第一个元素是 ,则findFirst()抛出 a 。NullPointerExceptionnull

您可以通过在调用之前设置默认值来避免这种情况findFirst()

ca.getInterviews().stream()
                  .map(Interview::getAgency)
                  .map(Agency::getAgencyName)
                  .map(s->s!=null?s:"") // this will replace null with ""
                  .firstFirst()
                  .get();
Run Code Online (Sandbox Code Playgroud)

  • 我会使用 `.filter(s -> s != null)` 或 `.filter(Objects::nonNull)` 然后你会得到第一个非 `null` 值。 (6认同)