解释这段代码 List<TAiStdAuditResult> noPassAiStdAuditResultList = finalNoPassAiStdAuditResultList.stream().filter(item -> !otherPassDocFileIdList.contains(item.getDocFileId())).collect(Collectors.toList()); log.info("剩余不通过的结果{}",noPassAiStdAuditResultList); DocMaterialQueryBO docMaterialQueryBO = new DocMaterialQueryBO(); docMaterialQueryBO.setDocDatumId(docDatumId); List<DocMaterialDTO> docMaterials = certDocMaterialService.list(docMaterialQueryBO); Map<String, List<TAiStdAuditResult>> docFileIdMap = tAiStdAuditResults.stream().filter(t -> (CertDocDatumFileTypeToMaterialEnum.BUSI_INVOICE.getDataFileTypeCode().equals(t.getFileType()) || CertDocDatumFileTypeToMaterialEnum.BUSI_CONTRACT.getDataFileTypeCode().equals(t.getFileType()))) .collect(Collectors.groupingBy(TAiStdAuditResult::getDocFileId)); docFileIdMap.forEach((k,v)->{ if(auditDocFileDTOMap.containsKey(k)){ Set<String> remarkSet = auditDocFileDTOMap.get(k).getRemarkSet(); String fileType = v.get(0).getFileType(); if(notThisFileSet.contains(k)){ if(CertDocDatumFileTypeToMaterialEnum.BUSI_INVOICE.getDataFileTypeCode().equals(fileType)){ remarkSet.add(AIAuditRemarkEnum.NOT_INVOICE.getCode()); remarkRealFileType(tAiStdAuditResults, v, auditDocFileDTOMap.get(k), docMaterials); }else if(CertDocDatumFileTypeToMaterialEnum.BUSI_CONTRACT.getDataFileTypeCode().equals(fileType)){ remarkSet.add(AIAuditRemarkEnum.NOT_BUSI_CONTRACT.getCode()); remarkRealFileType(tAiStdAuditResults, v, auditDocFileDTOMap.get(k), docMaterials); } }else if(finalNoPassAiStdAuditResultSet.contains(k)){ remarkSet.add(AIAuditRemarkEnum.AI_RETURN.getCode()); } } });
时间: 2024-04-15 15:26:05 浏览: 138
用java8 Stream流的方式对文本文件逐行处理–.docx
这段代码的主要功能是根据一些条件筛选出符合要求的数据,并进行一些处理。
首先,代码的第一行创建了一个名为noPassAiStdAuditResultList的列表,用于存储经过筛选后的数据。这个列表通过stream()方法对finalNoPassAiStdAuditResultList进行操作,filter()方法传入一个Lambda表达式,该表达式用于判断item是否符合条件,即item的docFileId不包含在otherPassDocFileIdList中。最后,collect()方法将符合条件的数据收集到noPassAiStdAuditResultList列表中。
接着,代码使用log.info()方法打印输出剩余不通过的结果。
接下来,代码创建了一个名为docMaterialQueryBO的DocMaterialQueryBO对象,并设置了其属性docDatumId为docDatumId。
然后,代码调用certDocMaterialService的list()方法,传入docMaterialQueryBO对象作为参数,返回一个名为docMaterials的列表。
接下来,代码使用stream()方法对tAiStdAuditResults进行操作,filter()方法传入一个Lambda表达式,该表达式用于筛选出fileType等于BUSI_INVOICE或BUSI_CONTRACT的数据,并使用collect()方法将符合条件的数据按照docFileId分组,生成一个名为docFileIdMap的Map对象。
接下来,代码使用forEach()方法遍历docFileIdMap中的每个entry。在遍历过程中,判断auditDocFileDTOMap是否包含当前entry的key(即docFileId),如果包含,则获取对应的value(即auditDocFileDTOMap中对应的数据对象),并通过调用getRemarkSet()方法获取remarkSet属性的值。
接着,代码获取当前entry的value(即一组符合条件的TAiStdAuditResult对象列表)中的第一个对象,并获取其fileType属性的值。然后,根据notThisFileSet是否包含当前entry的key(即docFileId)的判断结果进行处理。如果包含,则根据fileType的值判断是BUSI_INVOICE还是BUSI_CONTRACT,并将相应的代码添加到remarkSet中,并调用remarkRealFileType()方法进行一些处理。如果不包含,则判断finalNoPassAiStdAuditResultSet是否包含当前entry的key,如果包含,则将AIAuditRemarkEnum.AI_RETURN.getCode()添加到remarkSet中。
以上就是这段代码的大致解释,它主要是对数据进行筛选和处理,并记录一些结果。
阅读全文