ふくしま

ソフトウェアエンジニア

【メモ】ラムダ式とデリゲートとstream

ラムダ式とデリゲート

ラムダ式:関数を極力省略させる書き方。=>の左右で引数と処理を定義する。関数名はつけられない。さらに、引数の方や戻り値を省略できる。

デリゲート:変数化された関数のこと。ラムダ式をデリゲートに入れることで使用されることが多い。ある関数の引数にデリゲートを入れると自由に差し替えることができる。

デリゲートの記法:デリゲートは実質、関数であるため、引数や戻り値の「型」の組み合わせが複数存在する。例えば、引数なし戻り値ないの「Action」。引数あり返り値なしの「Action<T>」T型を引数にとれる。引数なし返り値ありの「Func<TResult> 」。引数あり返り値ありの「Func<T, TResult>」など。

 

↑はC#の話。Javaではどうか分からない。

 

stream

イテレーション:要素の集まりに対する繰り返し処理

stream:イテレーション拡張機能

 

steamの流れ:以下に尽きる。

基本的な流れ
1. コレクションからstreamを取得
2. streamに対して満足するまで「中間操作」を実行。コレクションの中身を都合よく変換
3. 「終端操作」で変換したコレクションの中身に対して処理を適用する

from: https://qiita.com/takumi-n/items/369dd3fcb9ccb8fcfa44

 

中間操作と終端操作でラムダ式が使われる。ここで気をつけたいのが、メソッド(と呼んでいいのか?filterやらforeachのこと)によって、引数と戻り値で取れる型が変わること。

 

疑問

Javaでは、デリゲートはどうなる?

終端操作は、foreach以外あるのか?

 

参考資料

https://qiita.com/takumi-n/items/369dd3fcb9ccb8fcfa44

https://qiita.com/toRisouP/items/98cc4966d392b7f21c30

https://morizyun.github.io/java/basic-itarator.html