MENU
👇しうが厳選・おすすめのブログ!
しう
【テニス好きブロガー】 
テニス、読書が好きです。IT企業で学んだこともブログに書いています。高校教諭(テニス部顧問)→IT企業。テニス歴12年。人生をより有意義なものにしたいと思い、ブログを書き始めました。Twitterもしています。
アーカイブ

ラムダ式の使い方(Java)【しうの備忘録】

ラムダ式 Java 使い方

今回は、Javaでのラムダ式の使い方についてご紹介します!

Javaを勉強し始めた時にはラムダ式に苦手意識を持つ人が多いですが、ラムダ式も仕組みがわかれば恐れる必要はありません。

Javaにおいて、ラムダ式はどのように使うことができるのか見ていきましょう!

 

しう

Javaの勉強を始めたばかりなら、半年後にもう一度振り返ると理解がしやすいで!

 

記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がJavaのラムダ式について書いています。

目次

ラムダ式とは?【Java中級者向け】

ラムダ式 Java 使い方

Javaのラムダ式(lambda expression)とは、関数を定義して、そのインスタンスをすぐに生成することです!

Java SE8から新しくできた機能になりますが、この説明だけではラムダ式では何ができるのかなどよくわからないと思います。

 

( 引数 ) -> { 処理 }

という形が出てきたら、Javaのラムダ式だなという認識をまずは持っておきましょう!詳しい解説は、次からしていきます。

関数型インターフェース【ラムダ式に必ず必要!】

ラムダ式 Java 使い方

関数型インターフェースは、定義されている抽象メソッドが一つだけあるインターフェースのことです!

Javaのラムダ式を勉強する準備として、関数型インターフェースについて学びましょう。

ラムダ式の書き方としては次のようになります。

(@FunctionalInterfaceはなくても関数型インターフェースを利用できます)

@FunctionalInterface
public interface MyInterface<T> {
    void accept(T t);
}

 

関数型インターフェースと明確にしたい場合は、次のようなアノテーションをつけます。

@FunctionalInterface

 

このようにすることで、関数型インターフェースの条件(定義されている抽象メソッドが一つ)を満たしていない場合、コンパイルエラーを表示してくれます。

そして、必ず押さえて欲しいポイントは、ラムダ式では必ず関数型インターフェースを使うことです!

 

しう

とても大切なことやから、忘れへんようにしといてや!!!

 

ちなみに、①Consumer、②Supplier、③Predicate、④Functionなど、importするだけで利用できる関数型インターフェースもあります。

この関数型インターフェースについての内容については次の記事で詳しく解説しています。

あわせて読みたい
ラムダ式(Java)でよく利用する関数型インターフェース【4種類を厳選】 今回は、Javaでのラムダ式で利用する関数型インターフェースについてご紹介します。初めて見る時にはラムダ式は理解しにくい内容ですが、この記事では初心者でもわかり...

ラムダ式の書き方【Java】

ラムダ式 Java 使い方

Javaでのラムダ式の書き方について見ていきましょう!

次の順に解説を読んでいくことで、よりラムダ式の理解を深めることができます。

  • ラムダ式の構文
  • ラムダ式以外の書き方では?
  • ラムダ式の省略記法

ラムダ式の構文

Javaでのラムダ式の構文は次のようになります!

 

(型 引数名1, 型 引数名2, ・・・) -> {
 処理1;
 処理2;
 return 戻り値;
}

 

先ほどの関数型インターフェースの項目のMyInterfaceを利用した具体例を出すと次のような形です。

MyInterface<String> lamdaInterface = (String inStr) -> {System.out.print(inStr)};

 

先ほどのMyInterfaceをオーバーライドしています。

メソッド名がついている場合は次のようなイメージになります。

MyInterface<String> lamdaInterface = accept(String inStr) -> {System.out.print(inStr)};

 

MyInterfaceのacceptメソッドの中身が

System.out.print(inStr)

にオーバーライドしています。

 

注意点としてラムダ式では、

(String inStr) -> {System.out.print(inStr)}

というようにどのメソッドか記載がありません。

 

関数型インターフェースのMyInterfaceでは抽象メソッドが一つだけなので、どのメソッドか記載する必要がないからです!

(指定しなくてもメソッドが一つしかないから、判断できるため)

 

そのため、ラムダ式では関数型インターフェースを利用することが必須条件になります。

また、実際に出力したい場合は次のようにすることで実行できるので、手順を理解しておきましょう。

lamdaInterface.accept("オーバーライドしたメソッドの実行");

 

しう

ラムダ式と関数型インターフェースはセットで使うと覚えといてや!

ラムダ式以外の書き方では?

Javaでのラムダ式を使わずに書く方法もご紹介します!

 

ラムダ式以外の書き方を学ぶことで、文の意味を理解しやすくなります。

理解力向上のためにも頑張っていきましょう。

 

パターン1(implementsの利用)

まずは関数型インターフェースを継承したLamdaクラスを作成します。

public class Lambda implements  MyInterface<String>{
    public void accept(String inStr){
        System.out.println(inStr);
}

 

その後、Lamdaクラスをインスタンス化して、acceptメソッドを呼び出します。

Lambda lambda = new Lambda();
lambda.accept("オーバーライド : パターン1");

 

パターン2(抽象メソッドをオーバーライド)

次のパターンは、抽象メソッドをオーバーライドする方法です。

 

MyInterface<String> myInterface = new MyInterface<String>(){
    public void accept(String instr){
        System.out.println(instr);
}

と書くことで、MyInterfaceのacceptメソッドをオーバーライドしています。

 

そして、acceptメソッドを呼び出すことで、メッセージの出力ができます。

myInterface.accept("オーバーライドの方法22");

 

ラムダ式とパターン1の比較

ラムダ式とパターン1の比較をして、ラムダ式の理解を深めましょう!

 

ラムダ式では次ように書きました。

MyInterface<String> lamdaInterface = (String inStr) -> {System.out.print(inStr)};

 

パターン1でここに該当するのは

public class Lambda implements  MyInterface<String>{
    public void accept(String inStr){
        System.out.println(inStr);
}

になります。

 

PC好きな一郎君

ラムダ式を使うとスッキリして見えるね。

しう

これがJavaのラムダ式のメリットでもあるわけやな!

 

※関数型インターフェースは、Consumer、Supplier、Predicate、FunctionなどImportするだけで利用できるものもあります。

 

この4つの標準的な関数型インターフェースについては次の記事で解説をしているので、気になる人は読んでみてくださいね。

あわせて読みたい
ラムダ式(Java)でよく利用する関数型インターフェース【4種類を厳選】 今回は、Javaでのラムダ式で利用する関数型インターフェースについてご紹介します。初めて見る時にはラムダ式は理解しにくい内容ですが、この記事では初心者でもわかり...

ラムダ式の省略記法

ラムダ式の省略記法についてご紹介します!

 

ラムダ式では、ある条件を満たしている時に省略した書き方をすることができます。

 

例えば次のように書いている場合、引数宣言の型を省略することができます。

MyInterface<String> lamdaInterface = (int inStr) -> {return intStr * intStr };

 

引数のintを省略すると次のようになります。

MyInterface<String> lamdaInterface = (inStr) -> { return intStr * intStr };

 

また、ラムダ式の引数が一つの場合は丸カッコも省略可能です。

MyInterface<String> lamdaInterface = inStr -> { return intStr * intStr };

 

ラムダ式が単一のreturn文の場合、波カッコとreturnも省略可能です。

MyInterface<String> lamdaInterface = inStr -> intStr * intStr;

 

() -> {}の形の場合、ラムダ式になるとこの記事の一番最初に紹介しました。

しかし、ラムダ式にはカッコを省略できる場合もあるので気を付けていきましょう。

ラムダ式のメリット

ラムダ式 Java 使い方

ラムダ式のメリットは、次の2点になります。

  • スッキリして見える
  • クラスを見に行かなくてすむ

スッキリして見える

ラムダ式では1行でメソッドの内容を書くことができます。

 

そのため、記載しているコードが何をしているのか直感的にわかりやすいです。

書き方に慣れてしまえば、ラムダ式を使った書き方を採用することで保守性が高まりますね。

クラスを見に行かなくてすむ

クラスの内容をわざわざ見に行かなくてすむこともメリットです。

 

ラムダ式では、メソッドの内容も書かれているためクラスの記載内容を見に行かなくてもすみます。

このような小さなことの積み重ねでコーディングの効率を高めることができるので意識していきましょう。

stream API

Javaでラムダ式を使うメリットとして、Stream APIの存在があります。

 

Stream APIについては、現在勉強中になります。

こちらについては、今後執筆予定です。完成を楽しみにしてくださいね。

まとめ

いかがでしたか?今回は次の順番でJavaでの関数型インターフェースについてご紹介しました。

  1. ラムダ式とは?【Java中級者向け】
  2. 関数型インターフェース【ラムダ式に必ず必要!】
  3. ラムダ式の書き方【Java】
  4. ラムダ式のメリット
  5. stream API

 

ラムダ式も書き方に慣れると便利だなと感じてきます。

実際の開発現場にも出てくることがあり、使えないと他の人が書いたコードが読めないということになってしまうので学習していきましょう!

 

☟あわせて読みたい 「しう」のオススメブログ

あわせて読みたい
Udemy Javaのおすすめ講座【初心者向け・6選】 今回はUdemyでJavaの初心者向けにおすすめ講座をまとめました!Udemyでは実際に動画を見ながら環境構築もできるのでおすすめです。ハンズオンで(自分の手を動かしなが...
あわせて読みたい
JavaでLombok! (@Builder)【しうの備忘録】 今回は、Builderについて解説していきます!   Builder って何なの? SpringのLombok(ロンボック、ロンボク)で使えるアノテーションの一つやで!   そんな機能もあ...
あわせて読みたい
Javaで挫折しない勉強法は?【独学前に知っておきたいこと】 プログラミングの需要が高まっている今、Javaの勉強をしようとする人が増えています。   しかし、いざJavaの勉強をしようとしても、どうやって勉強したらいいかわから...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

【しう】
Java Engineer| 最近はKotlin| 「テニスとJava(プログラミング)のお悩み解決ラボ」運営者| プログラミング・開発現場の学びを主に発信|【経歴】受託系IT企業➪自社開発企業| ∮保有資格∮ : Java Silver,Oracle SQL Silver,基本情報,TOEIC 750,簿記3級

コメント

コメントする

CAPTCHA


目次