Javaチュートリアル

Javaホーム Javaイントロ Javaはじめに Java構文 Javaコメント Java変数 Javaデータ型 Java型キャスト Java演算子 Java文字列 Java数学 Javaブール値 Java If ... Else Javaスイッチ JavaWhileループ JavaForループ Javaブレーク/続行 Java配列

Javaメソッド

Javaメソッド Javaメソッドパラメータ Javaメソッドのオーバーロード Javaスコープ Java再帰

Javaクラス

Java OOP Javaクラス/オブジェクト Javaクラス属性 Javaクラスメソッド Javaコンストラクタ Java修飾子 Javaカプセル化 Javaパッケージ/ API Javaの継承 Javaポリモーフィズム Java内部クラス Java抽象化 Javaインターフェイス Java列挙型 Javaユーザー入力 Java日付 Java ArrayList Java LinkedList Java HashMap Java HashSet Javaイテレータ Javaラッパークラス Javaの例外 Java RegEx Javaスレッド Javaラムダ

Javaファイル処理

Javaファイル Javaのファイルの作成/書き込み Java読み取りファイル Javaファイルの削除

Javaハウツー

2つの数字を追加する

Javaリファレンス

Javaキーワード Java文字列メソッド Java数学メソッド

Javaの例

Javaの例 Javaコンパイラ Java演習 Javaクイズ Java証明書


Javaラムダ式


Javaラムダ式

ラムダ式はJava8で追加されました。

ラムダ式は、パラメーターを取り込んで値を返す短いコードブロックです。ラムダ式はメソッドに似ていますが、名前は必要なく、メソッドの本体に直接実装できます。


構文

最も単純なラムダ式には、単一のパラメーターと式が含まれています。

parameter -> expression

複数のパラメーターを使用するには、それらを括弧で囲みます。

(parameter1, parameter2) -> expression

式は限られています。すぐに値を返す必要があり、変数、割り当て、またはなどのステートメントを含めることはできませifforより複雑な操作を行うために、中括弧を使用してコードブロックを使用できます。ラムダ式が値を返す必要がある場合は、コードブロックにreturnステートメントが必要です。

(parameter1, parameter2) -> { code block }

ラムダ式の使用

ラムダ式は通常、パラメーターとして関数に渡されます。

ArrayListのメソッドでランバ式を使用してforEach()、リスト内のすべての項目を出力します。

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );
  }
}

変数の型がメソッドが1つしかないインターフェースである場合、ラムダ式を変数に格納できます。ラムダ式は、そのメソッドと同じ数のパラメーターと同じリターンタイプを持つ必要があります。ConsumerJavaには、リストで使用されるインターフェース(java.utilパッケージに含まれている)など、これらの種類のインターフェースの多くが組み込まれています。

JavaのConsumerインターフェースを使用して、ラムダ式を変数に格納します。

import java.util.ArrayList;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    Consumer<Integer> method = (n) -> { System.out.println(n); };
    numbers.forEach( method );
  }
}

メソッドでラムダ式を使用するには、メソッドの型として単一メソッドインターフェイスを持つパラメーターが必要です。インターフェイスのメソッドを呼び出すと、ラムダ式が実行されます。

ラムダ式をパラメーターとして受け取るメソッドを作成します。

interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Hello", exclaim);
    printFormatted("Hello", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}