我遇到的情況,我檢查一類中的多個屬性爲空check.If其不爲空,我打電話,這將創造我一個新的對象的方法,我需要抓住這個實例反對參考。我成功地使用地圖做空檢查,但無法編寫代碼,這將幫助我在調用後捕獲返回對象。可以請某人幫忙嗎?的Java 8拉姆達空檢查使用
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想要的東西像下面要與拉姆達一起實施null檢查
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'代替。但是最大的問題是*你期望可能會'null'是什麼? – Holger
看看'Objects.requireNonNull(ref)',如果ref是非空值,則返回ref,如果是則拋出。它旨在促進先決條件檢查。 –