工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java 9 - オプション クラスの改善

null チェックと NullPointerException の問題を回避するために、オプションのクラスが Java 8 で導入されました。 Java 9 では、機能を改善するために 3 つの新しいメソッドが追加されています。

stream() メソッド

構文

public Stream<T> stream()

値が存在する場合は、その値のみを含む順次ストリームを返し、そうでない場合は空のストリームを返します。

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Tester {
public static void main(String[] args) {
   List<Optional<String>> list = Arrays.asList (
      Optional.empty(), 
      Optional.of("A"), 
      Optional.empty(), 
      Optional.of("B"));

      //filter the list based to print non-empty values
  
      //if optional is non-empty, get the value in stream, otherwise return empty
      List<String> filteredList = list.stream()
         .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
         .collect(Collectors.toList());

      //Optional::stream method will return a stream of either one 
      //or zero element if data is present or not.
      List<String> filteredListJava9 = list.stream()
         .flatMap(Optional::stream)
         .collect(Collectors.toList());

      System.out.println(filteredList);
      System.out.println(filteredListJava9);
   }  
}

出力

[A, B]
[A, B]

ifPresentOrElse() メソッド

構文

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

値が存在する場合は、その値で指定されたアクションを実行します。それ以外の場合は、指定された空ベースのアクションを実行します。

import java.util.Optional;

public class Tester {
   public static void main(String[] args) {
      Optional<Integer> optional = Optional.of(1);

      optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> 
         System.out.println("Not Present."));

      optional = Optional.empty();

      optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> 
         System.out.println("Not Present."));
   }  
}

出力

Value: 1
Not Present.

or() メソッド

構文

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

値が存在する場合は、値を説明する Optional を返します。それ以外の場合は、提供する関数によって生成された Optional を返します。

import java.util.Optional;
import java.util.function.Supplier;

public class Tester {
   public static void main(String[] args) {
      Optional<String> optional1 = Optional.of("Mahesh");

      Supplier<Optional<String>> supplierString = () -> Optional.of("Not Present");

      optional1 = optional1.or( supplierString);
  
      optional1.ifPresent( x -> System.out.println("Value: " + x));
    
      optional1 = Optional.empty();    

      optional1 = optional1.or( supplierString);
  
      optional1.ifPresent( x -> System.out.println("Value: " + x));  
   }  
}

出力

Value: Mahesh
Value: Not Present

Java

  1. Java 最終キーワード
  2. オペレーターの Java インスタンス
  3. Java ネストされた静的クラス
  4. Java匿名クラス
  5. Java シングルトン クラス
  6. Java リフレクション
  7. Java ObjectOutputStream クラス
  8. Javaジェネリック
  9. Java ファイル クラス
  10. Java 9 - ストリーム API の改善
  11. Java 8 - オプションのクラス