Java-Optional


Optionalクラス


java.util.Optionalクラス


Optionalクラスは、IntegerクラスやDoubleクラスのような「T」タイプのオブジェクトをパッケージするラップクラスです.
したがって、オプションのインスタンスは、すべてのタイプの参照変数を格納することができます.
これらのオプションオブジェクトを使用すると、予期せぬNullPointerException例外を提供することで簡単に回避できます.
これは、複雑な条件文を必要とせずに、null値による例外を処理できることを意味します.
オプションオブジェクトの作成
オプションオブジェクトは、of()メソッドまたはofNullable()メソッドを使用して作成できます.
of()メソッドは、空の値ではなく指定された値を持つオプションオブジェクトを返します.
nullがof()メソッドで作成されたオプションオブジェクトに格納されている場合、NullPointerException例外が発生します.
したがって、参照変数の値がnullのみの場合は、ofNullable()メソッドを使用してオプションオブジェクトを作成することをお勧めします.
ofNullable()メソッドは、指定した値がnullでない場合に指定した値を持つオプションオブジェクトを返します.指定した値がnullの場合、空のオプションオブジェクトを返します.
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");

System.out.println(opt.get());
コーディング練習
実行結果
자바 Optional 객체
Optionオブジェクトへのアクセス
get()メソッドを使用すると、オプションオブジェクトに格納されている値にアクセスできます.
Optionalオブジェクトに格納されている値がnullの場合、NoSuchElementException例外が発生します.
したがって、get()メソッドを呼び出す前に、isPresent()メソッドを使用して、オプションオブジェクトに格納されている値が空であるかどうかを決定し、呼び出すことが望ましい.
次の例では、isPresent()メソッドを使用して、オプションオブジェクトに格納されている値により安全にアクセスします.
  
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");

 

if(opt.isPresent()) {

    System.out.println(opt.get());

}
コーディング練習
実行結果
자바 Optional 객체
nullに置換する値を指定するには、次の方法を使用します.

  • orElse()メソッド:格納された値が存在する場合はその値を返し、値が存在しない場合は引数に渡される値を返します.

  • orElseGet()メソッド:格納された値が存在する場合はその値を返します.値が存在しない場合は、引数として渡されるラムダ式の欠落値を返します.

  • orElseThrow()メソッド:格納された値が存在する場合はその値を返します.値が存在しない場合は、引数として渡される例外を返します.
  • Optional<String> opt = Optional.empty(); // Optional를 null로 초기화함.
    
     
    
    System.out.println(opt.orElse("빈 Optional 객체"));
    
    System.out.println(opt.orElseGet(String::new));
    コーディング練習
    実行結果
    빈 Optional 객체
    上記の例で使用した空()メソッドは、オプションオブジェクトをnullに初期化します.
    基本タイプのOptionalクラス
    Javaは、InStreamクラスなどの基本タイプのストリームに独立したオプションクラスを提供します.

  • OptionalIntクラス

  • OptionalLongクラス

  • OptionalDoubleクラス
  • これらのクラスは、戻りタイプがオプションタイプではなく優先タイプである場合を除き、ほとんどの点で類似しています.
    また、クラスごとに格納された値にアクセスする方法も提供されています.
    クラスストレージ値へのアクセス方法
    Optional T get()
    OptionalInt int getAsInt()
    OptionalLong long getAsLong()
    OptionalDouble double getAsDouble()
    IntStream stream = IntStream.of(4, 2, 1, 3);
    
    OptionalInt result = stream.findFirst();
    
     
    
    System.out.println(result.getAsInt());
    
    コーディング練習
    実行結果
    4
    オプションの方法
    Optionalクラスのメソッドは次のとおりです.
    メソッドの説明
    静的オプションの空()値を持たない空のオプションオブジェクトを返します.
    T get()
    Optionalオブジェクトに格納されている値を返します.
    boolean isPresent()に格納されている値が存在する場合はtrueを返し、値が存在しない場合はfalseを返します.
    static Optional of(T value)
    nullではない値を持つオプションオブジェクトを返します.
    static Optional ofNullable(T value)
    指定した値がnullでない場合は、指定した値を持つオプションオブジェクトを返します.指定した値がnullの場合は、空のオプションオブジェクトを返します.
    T orElse(T other)
    保存した値が存在する場合は値を返し、存在しない場合は引数に渡される値を返します.
    T orElseGet(Supplier other)
    格納された値が存在する場合は値を返し、値が存在しない場合はパラメータとして渡されるラムダ式の欠落値を返します.
    T
    orElseThrow(Supplier exceptionSupplier)
    格納された値が存在する場合は値を返し、存在しない場合は引数として渡される例外を返します.
    ソース:http://tcpschool.com/java/java_stream_optional