Javaのオプションの例

LambdaとOptionalクラスが導入されたJava 8では、Streamをフィルタリングでき、Objectが返された場合、そのObjectでメソッドを呼び出すことができます。

構文:

	ifPresent( a -> {  } );

ifPresentメソッドを使用すると、返されるObjectがnullかどうかをテストする必要がないため、よりクリーンなコードを書くことができます。

例:

次に、ストリングのストリームを作成する例を示します。 最初に、オプションオブジェクトを使って最初の要素を見つけようとします。 次に、存在しない値を使用してストリームがフィルタリングされ、コードは存在しない最初の値に対してオプションを取得します。 boolean isPresentはfalseです。 最後に、コードはStreamを作成し、存在する値をフィルタリングし、最初の値を見つけて、ifPresentが値をメッセージに出力に書き出します。

次のJavaファイルを作成します。

import java.util.Optional;
import java.util.stream.Stream;

public class LambdaOptional {

	public static void main(String[] argv){
		// Create the Stream
		Stream<String> stream = Stream.of( "a", "c", "a", "b", "b");
		
		// Get the first element from the Stream
		Optional<String> op = stream.findFirst();
		
		System.out.println( "isPresent: " + op.isPresent()  );
		System.out.println( "first element: " + op.get() );

		// Same test with a value that doesn't exist
		op = Stream.of( "a", "c", "a", "b", "b")
				.filter( a -> a.equals( "z" ) )
				.findFirst();

		System.out.println( "isPresent: " + op.isPresent()  );
		
		// Same test using ifPresent
		Stream.of( "a", "c", "a", "b", "b")
				.filter( a -> a.equals( "a" ) )
				.findFirst()
				.ifPresent( a -> System.out.println( "Value found: " + a ) );
	}
}

出力は次のようになります。

isPresent: true
first element: a
isPresent: false
Value found: a

参考文献:

Lambda Expressions

最近のコメント