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

ラムダ式(Java)でよく利用する関数型インターフェース【4種類を厳選】

ラムダ式(Java)関数型インターフェース

今回は、Javaでのラムダ式で利用する関数型インターフェースについてご紹介します。

初めて見る時にはラムダ式は理解しにくい内容ですが、この記事では初心者でもわかりやすいように実際のコーディング例も活用して解説します。

ラムダ式はJava Silverの試験にも出てくる内容になります。

また、Javaでのラムダ式の関数型インターフェースについて知識があると開発現場のコードにラムダ式が利用されている場合でも改修がしやすくなります。

 

しう

開発現場で急にラムダ式を利用したコードが出てきたりするから知っておいて損はないで!


 

記事の信頼性:元教員の現役エンジニアの「しう」がJavaでのラムダ式のインターフェースについて書いています。

(ラムダ式の内容も勉強してJava Silverに合格もしています)

目次

Javaでのラムダ式とは?

ラムダ式(Java)関数型インターフェース

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

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



ラムダ式とは何なのかの詳しい解説については下記の記事で紹介しているので、気になる人は見てみてください。

プログラミング(Java・Kotlin)のお...
ラムダ式の使い方(Java)【しうの備忘録】 | プログラミング(Java・Kotlin)のお悩み解決ラボ! 今回は、Javaでのラムダ式の使い方についてご紹介します!Javaを勉強し始めた時にはラムダ式に苦手意識を持つ人が多いですが、ラムダ式も仕組みがわかれば恐れる必要はあり...

ラムダ式の関数型インターフェースとは?

ラムダ式(Java)関数型インターフェース

関数型インターフェースは、「関数型インターフェース」とは抽象メソッドが1つだけの抽象クラスのことです!

具体的には次のようなコードになります。

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

 

acceptメソッドは具体的な処理内容が書いていないので、抽象メソッドになります。

ラムダ式を活用する時には、この関数型インターフェースを利用して実装をおこないます。

しう

関数型インターフェースなしにはラムダ式は理解できへんで!

ラムダ式での標準的な関数型インターフェース

ラムダ式(Java)関数型インターフェース

ラムダ式でよく使われる関数型インターフェースは次の4つになります!

  1. Consumer
  2. Supplier
  3. Predicate
  4. Function

 

これらの関数型インターフェースを利用する場合は、java.util.functionパッケージをimportする必要があります。

今回紹介する4つ以外にも様々な関数型インターフェースが用意されているので、気になる人はOracle公式ページで調べてみてください。

Consumer

ラムダ式での標準的な関数型インターフェースの1つ目はConsumerです!

Consumer:void accept(T t)

 

引数としてTを受け取り、結果を返さずに処理を終了します。

実際にJavaのラムダ式で利用する場合は次のようになります。

public class Main{
    public static void main(String[] args) {
        Consumer consumer = (s) -> {
            System.out.println(s);
        };

        consumer.accept("プログラミング(Java)のお悩み解決ラボ!");
    }
}

 

Consumerのacceptメソッドをラムダ式を用いてSystem.out.printlnの処理でオーバーライドしています。(Consumerを利用する場合はacceptメソッドを利用することが決まりとなっています)

その後に、Consumerのacceptメソッドを実行して、オーバーライドされたSystem.out.printlnの出力を実行しています。

Supplier

ラムダ式での標準的な関数型インターフェースの2つ目はSupplierです!

Supplier:T get()

 

引数は受け取らず、結果としてTを返します。

実際にJavaのラムダ式で利用する場合は次のようになります。

public class Main{
    public static void main(String[] args) {
        Supplier supplier = () -> {
            return "プログラミング(Java)のお悩み解決ラボ!";
        };

        String dispMessage = (String) supplier.get();
        System.out.println(dispMessage);
    }
}

 

Supplierのgetメソッドの戻り値を、ラムダ式を用いてオーバーライドしています。

今回はsupplier.get()とコードを書くだけでは戻り値として、”プログラミング(Java)のお悩み解決ラボ!”が返ってくるだけなので利用できません。(get()は書くだけでは意味がないため)

出力(表示)をするためには例のようにdispMessageに戻り値を入れて、その後にdispMesasgeをSystem.out.printlnで表示する必要があります。

Predicate

ラムダ式での標準的な関数型インターフェースの3つ目はPredicateです!

Predicate:boolean test(T t)

 

引数を受け取り、結果としてbooleanを返します。

実際にJavaのラムダ式で利用する場合は次のようになります。

public class Main{
    public static void main(String[] args) {
        String dispMessage = "プログラミング(Java)のお悩み解決ラボ!";
        Predicate predicate = (s) -> {
            return (boolean) s;
        };

        boolean result = predicate.test(true);
        if(result){
            System.out.println(dispMessage);
        }
    }
}

 

Predicateのtestメソッドを、ラムダ式を用いてオーバーライドしています。

引数のs(trueもしくはfalse)の結果を返すように変更しています。

オーバーライドをしたtestメソッドを利用して、引数の結果をresultで受け取ります。

最後にresultがtrueの場合はdispMessageの内容を表示するようにしています。

(実際に開発現場でtrueをtestメソッドの引数で受け取る場合にはこのような書き方はしないですが、Predicateの説明のためにあえてこの書き方をしています。)

Function

ラムダ式での標準的な関数型インターフェースの4つ目はFunctionです!

Function:R apply(T t)

 

引数を受け取り、結果としてRの型で結果を返します。

実際にJavaのラムダ式で利用する場合は次のようになります。

public class Main{
    public static void main(String[] args) {
        Function function = (s) -> {
            String dispMessage = s + "プログラミング(Java)のお悩み解決ラボ!";
            return dispMessage;
        };

        System.out.println(function.apply("ラムダ式の解説:"));
    }
}

 

Functionのapplyメソッドを、ラムダ式を用いてオーバーライドしています。

引数のsと”プログラミング(Java)のお悩み解決ラボ!”を結合した結果を返すように変更しています。

オーバーライドしたapplyメソッドを利用して、”ラムダ式の解説:”と”プログラミング(Java)のお悩み解決ラボ!”を結合した文字列を生成しています。

最後にSystem.out.printlnで結合した内容を表示しています。

(実際に結合内容を表示したい場合は、”ラムダ式の解説:”+”プログラミング(Java)のお悩み解決ラボ!”で事足りますが、ラムダ式の解説のためここでもこのように記載しています)

その他の関数型インターフェース

今回紹介した関数型インターフェース以外にもUnaryOperatorやBiConsumerなど様々な関数型インターフェースが存在します。

気になる人はJavaの公式HPにも記載があるので調べてみてくださいね。

Oracle公式ページ

まとめ

いかがでしたか?今回は、次の順番でJavaでのラムダ式でよく利用する関数型インターフェースについてご紹介しました。

  1. Javaでのラムダ式とは?
  2. ラムダ式の関数型インターフェースとは?
  3. ラムダ式での標準的な関数型インターフェース
  4. その他の関数型インターフェース

 

初めて見た時には理解しにくいラムダ式ですが、繰り返し学ぶことでわかるようになってきます。

もし、動画教材の方が理解しやすい場合は次のUdemyの講義でもJavaでのラムダ式について学ぶことができます。

JavaSE8 ラムダ式講座

 

また、ラムダ式書き方やメリットについて知りたい人は、ラムダ式の使い方(Java)【しうの備忘録】の記事が参考になるので見てみてくださいね。

 

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

あわせて読みたい
Javaでカプセル化・練習問題付き【しうの備忘録】 Javaでよく使う考え方の一つにカプセル化があります。しかし、Javaの初学者にとっては理解しにくい考え方です。今回は、そんなJavaのカプセル化についてご紹介します! ...
あわせて読みたい
Java 配列 ArrayList HashMap まとめ Javaには、複数のデータを格納できる仕組みがあります。 それは、配列、ArrayList、HashMapと呼ばれています。   それぞれに便利な役割があるので、この記事でお伝えし...
あわせて読みたい
プログラミング練習問題集【Java】 まとめ プログラミング(Java)の勉強をしていると、コーディングの練習もしたくなりますよね。   実際に自分で決めた動きをプログラミングで再現できると、技術力が向上しま...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

コメント

コメントする

CAPTCHA


目次