Изменить значение из списка с помощью java8

Я хочу, чтобы значение обнулялось перед отправкой в ​​пользовательский интерфейс.

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.

Вы очищаете списки локальных переменных medicalSignsSymptomIdList и medicalInfoIdList вместо списков в medicalInfoVO, что вы, вероятно, намеревались сделать.

vlumi 12.06.2019 10:05

@vlumi Можете ли вы помочь мне, как изменить вышеуказанную функциональность потока?

bharathi 12.06.2019 10:11

ваши требования явно противоречат тому, что вы написали. «Мне нужно присвоить ему значение null». означает, что вам нужно изменить конкретное поле объекта, а не удалить объект из списка

Andrew Tobilko 12.06.2019 10:11

да ты прав

bharathi 12.06.2019 10:14

@bharathi, пожалуйста, покажи, как ты видишь "функциональность foreach"

Andrew Tobilko 12.06.2019 10:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
1 772
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не уверен, что вы хотите сделать, но в основном это "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());

Я использовал набор здесь, который кажется более логичным.

Не обязательно хороший стиль, чтобы сочетать слишком много вещей в потоке, для лучшего обслуживания. Здесь: изменение элементов и возврат нового списка.

Спасибо за помощь. Вы хоть поняли мой вопрос

bharathi 12.06.2019 16:52

Если вы отправляете объекты в пользовательский интерфейс, вам может не потребоваться устанавливать нулевые значения вручную. Если вы используете 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 Эгген.

Другие вопросы по теме