ホーム » スタッフ » 斉藤徹 » 講義録 » 情報構造論 » Javaでラムダ式の呼び出し

2025年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

検索・リンク

Javaでラムダ式の呼び出し

Javaでは、Stremクラスでよく使われる関数インタフェースは以下の通り。これらの関数インタフェースを経由してラムダ式を使う必要があるが、クラスの型推論があるため、Predicate などの関数インタフェース名や呼び出しメソッドを自分で書くことはない。

  • Predicate<T> – 引数Tでboolean型を返す test(T) -> boolean
  • Supplier<R> – 引数なし で R型を返す get() -> R
  • Consumer<T> – 引数T で void型 accept(T) -> void
  • BiConsumer<T,U> – 引数T,U で void型 accept(T,U) -> void
  • Function<T,R> – 引数T で R型を返す apply(T) -> R
  • BiFunction<T,U,R> – 引数T,U で R型を返す apply(T,U) -> R
import java.util.*;

import java.util.function.Predicate ;
import java.util.function.Supplier ;
import java.util.function.Consumer ;
import java.util.function.BiConsumer ;
import java.util.function.Function ;
import java.util.function.BiFunction ;

public class Main {
    public static void main( String[] args ) {
        Predicate<Integer> even = (Integer x) -> { return x % 2 == 0 ; } ;
        System.out.println( even.test( 10 ) ) ;
        // ...filter( x -> x % 2 == 0 )...

        Supplier<String> greet = () -> "Hello" ;
        System.out.println( greet.get() ) ;
 
        // 1引数の Consumer<T> f = (T t) -> 式 ;
        //   Consumer は accept で呼び出す
        Consumer<Integer> foo = (Integer x) -> System.out.println( x ) ;
        foo.accept( 10 ) ;
 
        // ...forEach( x -> System.out.println( x ) ) ;
        // 2引数の BiConsumer<T,U> f = (T t , U u) -> 式
        BiConsumer<Integer,Integer> bar = (Integer x , Integer y) -> System.out.println( x * y ) ;
        bar.accept( 10 , 20 ) ;
        
        // 1引数で値を返す Function<T,R> f = (T t) -> { return 式 }
        //   Function は apply で呼び出す
        Function<Integer,Double> baz = (Integer x) -> Math.sqrt( x ) ;
        System.out.println( baz.apply( 5 ) ) ;
        // ...map( x -> x*x )...
 
        // 2引数で値を返す BiFunction
        BiFunction<Integer,Integer,Double> piyo = (Integer x , Integer y) -> Math.sqrt( x * y ) ;
        System.out.println( piyo.apply( 5 , 10 ) ) ;
    }
}