【Java】今さら聞けないラムダ式の基本を解説

java

Java8の一番の目玉でもあるラムダ式の基本的な部分を紹介していきます。

私自身がつまずいた箇所、よく分からなかった箇所を重点的にまとめています。

これからJava8を勉強しようとする方に参考にして頂ければ幸いです。

[スポンサーリンク]

このページでやること

Java8のラムダ式を使った簡単なプログラムを紹介します。

ラムダ式とは

一言で表すなら、処理を変数に持つことが出来る。がラムダ式の概要になります。
少しピンとこないかもしれません。

匿名クラス(無名クラス)に似ているものだと考えてみて下さい。
そう、クラスをキチンと作らずに、局所的にクラスを用意する匿名クラスです。
匿名クラスが、ロジック中に一度しか使えないのに対して、ラムダ式は複数回使うことが出来ます。

ただし、ラムダ式を勉強すると、ラムダの性質が匿名クラスとは全く異なることがわかると思います。
今は匿名クラスとラムダ式は、動きが似ているもの程度に覚えておくとよいと思います。

一番簡単なラムダ式を使ったサンプルプログラム

3,4,5行目がいわゆるラムダ式の記述です。
9行目は、ラムダ式で使用するため、事前にインターフェースを用意する必要があります。
自前でインターフェースを用意する場合は、@FunctionalInterfaceを付加します。
Java8が予め用意しているインターフェース(FunctionやSupplier)もありますが、今回は省略します。
(こちらについては、別ページで紹介していきます。)

	public static void main(String[] args) {
		
		Hello hello1 = (String str) -> {
			System.out.println("その1 : " + str); 
		};
		hello1.show("これが正式なラムダ式の記述です。");
	}

	@FunctionalInterface
	private interface Hello {
	    public void show(String str);
	}
>実行結果
その1 : これが正式なラムダ式の記述です。

変数の型を省略することも可能です。

先ほどのサンプルソースの引数型を省略することが出来ます。


		Hello hello1 = (String str) -> {
			System.out.println("その1 : " + str); 
		};
		hello1.show("これが正式なラムダ式の記述です。");

		Hello hello2 = (str) -> {
			System.out.println("その2 : " + str); 
		};
		hello2.show("引数の型(String)を省略することができます。");

()カッコを省略することも可能です。

引数の数が1つの場合のみ、()カッコを省略することができます。
先ほどのサンプルソースの()カッコを省略したソースコードです。

		Hello hello1 = (String str) -> {
			System.out.println("その1 : " + str); 
		};
		hello1.show("これが正式なラムダ式の記述です。");

		Hello hello2 = (str) -> {
			System.out.println("その2 : " + str); 
		};
		hello2.show("引数の型(String)を省略することができます。");

		Hello hello3 = str -> {
			System.out.println("その3 : " + str); 
		};
		hello3.show("引数が1つの場合のみ、()を省略することができます。");

わたしがラムダを勉強して混乱したこと。

ラムダ式を勉強するにあたり、ネットで公開されているソースコードを見ていましたが、「引数の型」や「()カッコ」がついていたり、ついていなかったりと、正しい形はどれなのだろうと若干混乱しました。

省略のルールさえ先に覚えておけば、あの時は混乱しなくてすんだのになぁ。と今になっては感じます。
これからラムダ式を勉強されるという方は是非このあたりのルールを先に習得すると混乱しなくてすむのかなと思います。

さいごに

Java8が登場してから、まだまだ私のまわりではJava8が浸透していないように感じます。
残念ながら、ラムダが浸透するまでもう少し時間がかかりそうです。
(一般的にもまだそこまで流行っていないようにも感じます。実際はどうなのでしょう。)

Java8になって、ラムダ以外にも色々とかわってきています。
早く仕事でも使っていきたいですね。
それでは!