Java Optionalクラスのサンプル

JavaのOptionalクラスのサンプルです。

目次

Optionalクラス

コード

Optionalクラスのサンプルです。

package test1;
import java.util.Optional;

public class Test1 {
    public static void main(String[] args) {
    	Optional<String> a = getName1();
    	String b = a.orElse("moji2");
    	System.out.println(b); //moji2
    }
	static Optional<String> getName1() {
		String a = null;
		//String a = "moji";
		return Optional.ofNullable(a);
	}
 }

6行目は、10行目のメソッドを呼んでいます。
13行目は、Optionalとして値を戻します。ofNullableメソッドは、値があるOptionalまたは空のOptionalを返します。呼び出し元にOptionalの記述を強制させ、NullPointerExceptionが発生しないようにします。
7行目のorElseメソッドは、値が存在しないとき引数の値を返します。
8行目は、moji2と表示されます。

11行目をコメントにし、12行目のコメントを外すと8行目はmojiと表示されます。

filterメソッド

Optionalの値をフィルタすることができます。

コード

filterメソッドのサンプルです。

package test1;
import java.util.Optional;

public class Test1 {
    public static void main(String[] args) {
    	Optional<String> a = getName1();
    	a
    	.filter(x -> x.length() >3)
    	.ifPresent(System.out::println);//moji
    	System.out.println(a); //Optional[moji]
    }
	static Optional<String> getName1() {
		String a = "moji";
		return Optional.ofNullable(a);
	}
 }

8行目は、文字の長さが3文字より大きい場合に一致します。
9行目は、文字列mojiが表示されます。
8行目の数値を3より大きい値にすると9行目は何も表示されません。

9行目の(System.out::println)はメソッド参照です。
(x -> {System.out.println(x);})と同じ意味です。

 

mapメソッド

Optionalの値を処理して返します。

コード

mapメソッドのサンプルです。

package test1;
import java.util.Optional;

public class Test1 {
    public static void main(String[] args) {
    	Optional<String> a = getName1();
    	a
    	.map(x -> x.toUpperCase())
    	.ifPresent(System.out::println); //MOJI
    	System.out.println(a); //Optional[moji]
    }
	static Optional<String> getName1() {
		String a = "moji";
		return Optional.ofNullable(a);
	}
 }

8行目は、文字を大文字に変換しています。
9行目は、大文字でMOJIが表示されます。

9行目の(System.out::println)はメソッド参照です。
(x -> {System.out.println(x);})と同じ意味です。

 

mapメソッドとflatMapメソッドの違い

mapメソッドとflatMapメソッドの違いのサンプルです。

package test1;
import java.util.Optional;

public class Test1 {
    public static void main(String[] args) {
    	// mapメソッド
    	Optional<Object> a = getName1("1").map(x ->getName1(x));
    	System.out.println(a); //Optional[Optional[1]]

    	// flatMapメソッド
    	Optional<Object> b = getName1("1").flatMap(x ->getName1(x));
    	System.out.println(b); //Optional[1]
    }
	static Optional<String> getName1(String a) {
		return Optional.ofNullable(a);
	}
 }

7行目は、mapメソッドを使用し、getName1メソッドを2回実行しています。
15行目の戻り値はOptional型です。
8行目は、Optionalの中にOptionalがある形になります。Optional[Optional[1]]。

11行目は、flatMapメソッドを使用し、getName1メソッドを2回実行しています。
15行目の戻り値はOptional型です。
12行目は、Optionalは1つだけの形になります。Optional[1]。

関連の記事

Java if文のサンプル

△上に戻る