LoginSignup
0
0

More than 1 year has passed since last update.

Java8 ラムダ式使い方

Posted at

ラムダ式基本構文

インターフェース名 オブジェクト名 = (引数1, 引数2, ・・・) ->{return 処理内容};

引数の型を記述する必要はない
→引数の型はコンパイラーによって類推されるから
 従来通り型を記述してもコンパイルエラーになることもない

ラムダ式の引数が1つの場合

インターフェース名 オブジェクト名 = 引数 -> 処理 ;

引数が1つの場合は処理結果を返すreturnや引数群を囲む()、処理の記述を囲む{}を記述する必要はない

メソッド参照

メソッド参照:メソッドの引数としてメソッドを参照できる仕組み

書き方

・呼び出したいメソッド名の直前に::をつける
・その前にクラス名を記述
*メソッドの引数部分の()は省略

クラス名 :: メソッド名

ラムダ式での呼び出し

import java.util.ArrayList;

public class Sample{

    public static void main(String args[1]{
        ArrayList<Integer>list = new ArrayList<>();

        for(int i = o; i < 10 ; i++){
            list.add(i);
        }

        list.forEach(i -> System.out.print(i));
    }
}

→ラムダ式でメソッドを呼び出している

結果

0123456789

メソッド参照での呼び出しについて

ラムダ式での参照をメソッド参照にしてみる↓

import java.util.ArrayList;

public class Sample2{

    public static void main(String args[]) {
        ArrayList<Integer> list = new ArrayList<>();

        for(int i = 0 ; i < 10 ; i++) {
            list.add(i);
        }


        list.forEach(System.out::print);
    }
}

結果

0123456789

引数が複数の場合

メソッド参照やラムダ式の記述を使うときは、引数と戻り値に型が一致する関数型のインターフェースのオブジェクトに代入

import java.util.Comparator;

public class Sample3 {

    public static void main(String args[]) {
        Comparator<Integer> comp = Integer::compare;
        System.out.println(comp.compare(1, 2));
    }
}

結果

-1

Integer.compare() → Integer::compareと記述している

戻り値の扱い方


import java.util.function.IntSupplier;

public class Sample4 {

    public static void main(String args[]) {
        String str = "Hello";

        IntSupplier is = str::length;
        System.out.println(is.getAsInt());
    }

}

結果

5

str.length() → str::length
関数型インターフェース IntSupplierのオブジェクトisに戻り値を代入
getAsIntメソッドで戻り値を取得

コンストラクタ参照

書き方

クラス名::new
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

class Sample5{
    public static void main(String args[]){

        Supplier<ArrayList<Integer>> supplier = ArrayList::new;
        List<Integer> list = supplier.get();

        for(int i = 0 ; i < 10 ; i++){
            list.add(i);
        }

        list.forEach(System.out::print);
    }
}

結果

0123456789

ArrayList::newでArrayList型のオブジェクトを生成
supplier.get()でList型のオブジェクトを取得

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0