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

Java 9のOptionalクラス新機能:stream()、ifPresentOrElse()、or()

OptionalクラスはJava 8で導入され、nullチェックとNullPointerException問題を回避するためのものです。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"));
        
        // 従来の方法:flatMapでフィルタリング
        List<String> filteredList = list.stream()
            .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
            .collect(Collectors.toList());
        
        // Java 9: Optional::streamを使用
        List<String> filteredListJava9 = list.stream()
            .flatMap(Optional::stream)
            .collect(Collectors.toList());
        
        System.out.println(filteredList);      // [A, B]
        System.out.println(filteredListJava9); // [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のfinalキーワード完全解説:変数、メソッド、クラスでの活用法
  2. Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
  3. Java Staticネストクラスの理解:用法、違い、実例
  4. Java無名インナークラス完全ガイド:定義、構文、実践例
  5. Javaシングルトンパターン完全解説:安全な実装と活用法
  6. Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
  7. Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
  8. Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
  9. Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除
  10. Java 9ストリームAPI拡張:takeWhile、dropWhile、iterate、ofNullable
  11. Java 8 Optional完全ガイド:実践的なNull安全コードの書き方