私はクラスnull check.Ifのための私は新しいオブジェクトを作成するメソッドを呼び出すと、このインスタンスをキャプチャする必要が呼び出すクラスの複数の属性をチェックしているシナリオがあります私はsuccesasfullyマップを使用してnullのチェックを行うことができますが、呼び出し後に戻りオブジェクトをキャプチャするのに役立つコードを書くことができませんでした。誰かが助けてください?Java 8ラムダnullチェックの使用
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;
}
今期待:各buildPayloadEntry call.Iはラムダヌルチェックと一緒に実装される以下のようなもの
payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", ccarReportPreferenceConfig.getSequenceNumber()));
payLoadEntries.add(buildPayLoadEntry("SLA_TYPE", ccarReportPreferenceConfig.getSlaValue().toString()));
ごとに更新回答を希望した後
payloadEntriesリストが返されたオブジェクトをキャプチャする必要があります以下の提案
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がnullでない場合はrefを評価し、そうであればthrowします。前提条件のチェックを容易にすることを目的としていました。 –