[モダンジャワ動作]Optional
今回のテーマキーワード
無価の状況をどう処理しますか?
場合によっては、
nullによる問題
すべての参照タイプにnullを割り当てることができるので、別の部分に展開すると、そのnullの意味も不明です.
Optionalクラス
값이 없을 수 있음
を明確に示す.ソース
Optionオブジェクトの作成
空のオプション
Optional<Car> optCar = Optional.empty();
private static final Optional<?> EMPTY = new Optional<>();
Null以外の値でのオプションの作成
Optional<Car> optCar = Optional.of(car);
Null値を使用したオプションの作成
Optional<Car> optCar = Optional.ofNullable(car);
mapを使用してオプションの値を抽出および変換
String name = null;
if(insurance != null){
name = insurance.getName();
}
たとえば、Optional<Insurance> optInsurance = Optional.ofNullable(insurance);
Optional<String> name = optInsurance.map(Insurance::getName);
FlatMapを使用してOptionalオブジェクトを接続する
public String getCarInsuranceName(Person person) {
return person.getCar().getInsurance().getName();
}
Optional<Person> optPerson = Optional.of(Person);
Optional<String> name = optPerson.map(Person::getCar).map(Car::getInsurance).map(Insurance::getName);
optPerson.map(Person::getCar)
public String getCarInsuranceName(Optional<Person> person) {
return person.flatMap(Person::getCar).flatMap(Car::getInsurance).map(Insurance::getName).orElse("Unknown");
}
ドメインモデルでオプションを使用するときにデータをシリアル化できない理由
public class Person {
private Car car;
public Optional<Car> getCarAsOptional() {
return Optional.ofNullable(car);
}
}
アクションオプションフロー
Stream<Optional<String>> stream = ...;
Set<String> result = stream.filter(Optional::isPresent)
.map(Optional::get)
.collect(toSet());
分離アクションとオプションエンベロープ
get
これは
orElse
orElseGet(Supplier<? extends T> other)
orElseThrow(Supplier<? extends X> exceptionSupplier)
ifPresent(Consumer<? super T> consumer)
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
2つのオプションをマージ
map
およびflatMap
オプションが空の場合、empty Optional
が返されます.特定の値をフィルタ
Optionの使用例
nullのターゲットをオプションで囲む
Object value = map.get("key");
Optional<Object> value = Optional.ofNullable(map.get("key"));
例外とオプションクラス
public static Optional<Integer> stringToInt(String s) {
try {
return Optional.of(Integer.parseInt(s));
} catch(NumberFormatException e) {
return Optional.empty();
}
}
なぜ基本オプションを使用しないのですか?
余分に考慮した部分
Reference
この問題について([モダンジャワ動作]Optional), 我々は、より多くの情報をここで見つけました https://velog.io/@ljo_0920/모던-자바-인-액션-Optionalテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol