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 ) ) ; } }
レポート課題(後期期末) ハッシュ法
課題内容
以下の内容の中から1つを選びハッシュ法でデータを登録・検索するプログラムを作成せよ。
- 名前と電話番号 – 名前で検索、電話番号で検索などができること。
- 名前とメールアドレス – メールアドレスで検索し、名前を表示… などができること。
- 名前と生年月日 – 名前で誕生日を検索などができること。
ハッシュ衝突が発生しているかどうかを確認し、ハッシュ関数を変更することでハッシュ衝突がどうなるかの違いなどを検証すること。