# 北海道在住のため、地震でしばらくこれませんでした・・。
ラムダ式はStreamAPIと相性がよく、関数型プログラミングを実現させてくれる点も見逃せません。
もし命令型プログラミングと、関数型プログラミングの違いが分からなければ、リンク先をご覧ください。
https://qiita.com/munieru_jp/items/6c0dbada463e00429fd1
以下のコードはリンク先からの引用です。
コード:
List<String> numTextList = Arrays.asList("0", "1", null);
List<Integer> numList = new ArrayList<>();
for(String numText : numTextList){
if(numText == null){
continue;
}
int num = Integer.parseInt(numText);
numList.add(num);
}
今、リストにある、nullを除外した"0"と"1"を取り出してint型のリストに詰めたい時、
従来の命令型プログラミングだとこのように書かなければなりません。
やりたいことは
「nullを除いて"0"と"1"を取り出して」
「文字列をint型に変換して」
「リストに詰める」
ことです。これをこの文章通りにプログラミングできればバグも減り、
コードの可読性も向上するはずですが、命令型プログラミングではそれが困難です。
ここで、StreamAPIとラムダ式を用いて書き直してみます。
コード:
List<String> numTextList = Arrays.asList("0", "1", null);
List<Integer> numList = numTextList.stream()
.filter(s -> Objects.nonNull(s))
.map(s -> Integer.parseInt(s))
.collect(Collectors.toList());
これを改めてみてみましょう。
「nullではない物をフィルターにかけて」
「文字列をint型に変換して」
「リストに詰める」
ことをしています。
どうでしょう、命令型プログラミングと関数型プログラミングはどちらが分かりやすでしょうか。
実現したいことを文章に起こした通りに実装できていると思えます。
私は
この本を持っていますが、ラムダ式はそれだけで一冊本が書けてしまうほどの使い方があります。
深く知りたければラムダ式に特化した本を読んでみるとよいかと思います。