使用java8从列表中更改值

时间:2019-06-12 08:00:18

标签: java java-8

我希望在发送到UI之前将值取消为空。

public class MedicalInfoVO {
    private Integer medicalDeoId;
    private List<MedicalCoverageVO> medicalCoverages;
    private List<MedicalSignsSymptomVO> medicalSignsSymptoms;
}

public class MedicalSignsSymptomVO {
    private Integer medicalSignsSymptomId;
    private Integer symptomId;
    private String symptomType;
    private Integer medicalInfoId;
    private Integer diagnosisId;
   private String diagnosisValue;
}

在发送回服务调用之前,我需要将medicalSignsSymptomId和medicalInfoId设为空。

medicalInfoVO = retrieveMedicalInfoDetails(authorizationId, claimId);
if(null ==medicalInfoVO || null == medicalInfoVO.getMedicalDeoId()){
    medicalInfoVO = retrieveMedicalInfoDetails(authorizationId, null);
    medicalInfoVO.setClaimId(claimId);
    medicalInfoVO.setMedicalDeoId(null);
    if(CollectionUtils.isNotEmpty(medicalInfoVO.getMedicalSignsSymptoms())) {
        List<Integer> medicalSignsSymptomIdList = medicalInfoVO.getMedicalSignsSymptoms().stream()
                .map(map -> map.getMedicalSignsSymptomId()).collect(Collectors.toList());
        medicalSignsSymptomIdList.clear();
        List<Integer> medicalInfoIdList = medicalInfoVO.getMedicalSignsSymptoms().stream()
                .map(map -> map.getMedicalInfoId()).collect(Collectors.toList());
        medicalInfoIdList.clear();
    }
}

使用流功能执行此操作时,对象值仍未清除。

假设对象MedicalSignsSymptomVO的medicalSignsSymptomId为3, 我需要给它赋空值。同样适用于medicalInfoId。

我可以知道如何使用流功能而不是使用foreach功能来完成此操作。

2 个答案:

答案 0 :(得分:0)

不确定要做什么,但基本上,以下内容是“ streamy:”

    medicalInfoVO.getMedicalSignsSymptoms().forEach(mSSymptoms -> {
            mSSymptoms.setMedicalSignsSymptomId(null);
            mSSymptoms.setMedicalInfoId(null);
    });

可以将其组合如下:

    Set<Integer> medicalSignsSymptomIdList = medicalInfoVO.getMedicalSignsSymptoms().stream()
            .map(mSSymptoms -> {
                Integer id = mSSymptoms.getMedicalSignsSymptomId();
                mSSymptoms.setMedicalSignsSymptomId(null);
                mSSymptoms.setMedicalInfoId(null);
                return id;
            }) 
            .collect(Collectors.toSet());

我在这里使用了一套,似乎更合逻辑。

不一定是好的样式,因为要在流中合并太多内容以进行更好的维护。在这里:更改元素并返回新列表。

答案 1 :(得分:0)

如果要将对象发送到UI,则可能不需要手动将值设置为null。 如果您使用的是Jackson,则可以在对对象进行序列化/反序列化时简单地将JSONIgnore放在忽略字段中。 例如

@JsonIgnoreProperties(ignoreUnknown = true)
public class MedicalSignsSymptomVO {
    @JSONIgnore
    private Integer medicalSignsSymptomId;
    private Integer symptomId;
    private String symptomType;
    private Integer medicalInfoId;
    private Integer diagnosisId;
   private String diagnosisValue;
}

如果您需要将其他字段序列化,则可以使用@Joop Eggen的答案中所述的forEach方法。