我必须得到数组的第一个元素。但是元素可能是空的;如果元素为空,我放一个空字段(我试图生成一个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();
}
所以我希望不要阻止生成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();
}
我得到一个NullPointerException:/ 谢谢你的帮助
答案 0 :(得分:4)
此代码没有意义。您正在执行相同的Stream
管道两次,并且每当您只需要List
的第一个元素时生成整个List
。
您可以使用findFirst
获取Stream
的第一个元素。
编辑:
在测试我的原始答案后,结果证明它不起作用。如果第一个元素是findFirst()
,则NullPointerException
会抛出null
。
您可以在调用findFirst()
之前设置默认值来避免这种情况:
ca.getInterviews().stream()
.map(Interview::getAgency)
.map(Agency::getAgencyName)
.map(s->s!=null?s:"") // this will replace null with ""
.firstFirst()
.get();