Я хочу, чтобы значение обнулялось перед отправкой в пользовательский интерфейс.
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, Мне нужно присвоить ему значение null. то же самое и для medicalInfoId.
Могу ли я узнать, как это можно сделать с помощью функции потока вместо использования функции foreach.
@vlumi Можете ли вы помочь мне, как изменить вышеуказанную функциональность потока?
ваши требования явно противоречат тому, что вы написали. «Мне нужно присвоить ему значение null». означает, что вам нужно изменить конкретное поле объекта, а не удалить объект из списка
да ты прав
@bharathi, пожалуйста, покажи, как ты видишь "функциональность foreach"




Не уверен, что вы хотите сделать, но в основном это "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());
Я использовал набор здесь, который кажется более логичным.
Не обязательно хороший стиль, чтобы сочетать слишком много вещей в потоке, для лучшего обслуживания. Здесь: изменение элементов и возврат нового списка.
Спасибо за помощь. Вы хоть поняли мой вопрос
Если вы отправляете объекты в пользовательский интерфейс, вам может не потребоваться устанавливать нулевые значения вручную.
Если вы используете 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;
}
Если вам нужны эти поля, сериализованные в другом месте, вы можете использовать метод forEach, как описано в ответе @Joop Эгген.
Вы очищаете списки локальных переменных
medicalSignsSymptomIdListиmedicalInfoIdListвместо списков вmedicalInfoVO, что вы, вероятно, намеревались сделать.