У меня есть сценарий, где я проверяю несколько атрибутов внутри класса для проверки null. Если это не null, я вызываю метод, который создаст мне новый объект, и мне нужно будет захватить этот экземпляр против ссылки. Я успешно выполняю нулевую проверку с использованием карт, но не могу написать код, который поможет мне в захвате возвращаемого объекта после вызова. Может кто-то помочь?Java 8 lambda null check use
private WorkflowPreference buildWfPrefDetails(CcarReportPreferenceConfig ccarReportPreferenceConfig) {
WorkflowPreference workflowPreference = new WorkflowPreference();
List<PayloadEntry> payLoadEntries = new ArrayList<PayloadEntry>();
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRwpRole)
.map(RwpRole::getRoleName)
.ifPresent(s -> workflowPreference.setKey(s));
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSequenceNumber)
.ifPresent(s -> buildPayLoadEntry("SEQ_NUM", s));
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSlaType)
.ifPresent(s -> buildPayLoadEntry("SLA_TYPE", s));
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSlaValue)
.ifPresent(s -> buildPayLoadEntry("SLA_VALUE", s.toString()));
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRejectSequence)
.ifPresent(s -> buildPayLoadEntry("REJECT_SEQUENCE", s));
Optional.of(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRaiseQueryNotification)
.ifPresent(s -> buildPayLoadEntry("RAISE_QUERY_NOTIFICATION", s));
workflowPreference.getValue().addAll(payLoadEntries);
return workflowPreference;
}
private PayloadEntry buildPayLoadEntry(String key, String value) {
PayloadEntry payloadEntry = new PayloadEntry();
payloadEntry.setKey(key);
payloadEntry.setValue(value);
return payloadEntry;
}
Ожидаемое Сейчас:
payloadEntries список должен захватить возвращенный объект после каждого buildPayloadEntry call.I хотите что-то, как показано ниже, чтобы быть реализован вместе с лямбда нулевые чеки
payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", ccarReportPreferenceConfig.getSequenceNumber()));
payLoadEntries.add(buildPayLoadEntry("SLA_TYPE", ccarReportPreferenceConfig.getSlaValue().toString()));
Обновлено Ответ в соответствии с ниже предложений
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRwpRole)
.map(RwpRole::getRoleName)
.ifPresent(s -> workflowPreference.setKey(s));
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSequenceNumber)
.ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", s)));
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSlaType)
.ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SLA_TYPE", s)));
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getSlaValue)
.ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SLA_VALUE", s.toString())));
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRejectSequence)
.ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("REJECT_SEQUENCE", s)));
Optional.ofNullable(ccarReportPreferenceConfig)
.map(CcarReportPreferenceConfig::getRaiseQueryNotification)
.ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("RAISE_QUERY_NOTIFICATION", s)));
workflowPreference.getValue().addAll(payLoadEntries);
По-видимому, вы уже знаете о существовании 'операции map'. Поэтому непонятно, почему вы вместо этого используете 'ifPresent'. Но большой вопрос: * что * вы ожидаете, что будете потенциально «нулевыми»? – Holger
Посмотрите на 'Objects.requireNonNull (ref)', который вычисляет ref, если ref не равен NULL, и выбрасывает, если это так. Он был предназначен для облегчения проверки предварительных условий. –