Java 在流上迭代时出现NullPointerException

Java 在流上迭代时出现NullPointerException,java,nullpointerexception,java-stream,Java,Nullpointerexception,Java Stream,下面的函数在流上迭代,但对于某些输入,它会抛出NullPointerException: public List<DesignTimeLibrary> getDTLData(List<Project> projects, String projLibLocation, String estimatePath) { List<DesignTimeLibrary> allDTLs = new ArrayList<DesignTimeLibrary&g

下面的函数在流上迭代,但对于某些输入,它会抛出NullPointerException:

public List<DesignTimeLibrary> getDTLData(List<Project> projects, String projLibLocation, String estimatePath) {
    List<DesignTimeLibrary> allDTLs = new ArrayList<DesignTimeLibrary>();
    FileProcessor fileProc = new FileProcessor();
    XPathProcessor xProc = new XPathProcessor();
    projects.stream()
            .filter(pJ-> pJ.getDtlNames().size()>0)
            .flatMap(project -> project.getDtlNames().stream()).filter(Objects::nonNull)
            .forEach(dTL -> {
                if(containsName(allDTLs, dTL)) return;
                Logger.info("***** Processing DTL "+dTL+" *****");
                Map<String, Process> dtlProcesses = null;
                List<SharedResource> dtlResources = null;
                List<Schema> dtlSchemas=null;
                List<Adapter> dtlAdapters = null;
                try {
                    Path pP = fileProc.extractProjLib(projLibLocation + File.separator + dTL, projLibLocation + File.separator + "extracted");
                    DesignTimeLibrary dtl = new DesignTimeLibrary(dTL, pP);
                    ...
                    allDTLs.add(dtl);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            });
    return allDTLs;
}
这里,
.forEach(dTL->{
是第79行。
我尝试过调试,但找不到空对象。

第77行是
NullPointerException
,它在这里
pJ->pJ.getDtlNames().size()>0
。如果
getDtlNames()
返回空值,则抛出
NullPointerException
,因此只需向该筛选器添加空检查

 .filter(pJ-> Objects.nonNull(pJ.getDtlNames()) && pJ.getDtlNames().size()>0)

您能否确保
projects
永远不会
null
?如果是这种情况,
projects.stream()
将导致NullPointerException
 .filter(pJ-> Objects.nonNull(pJ.getDtlNames()) && pJ.getDtlNames().size()>0)