もっと Lambda その9

Java

ずっとブログの更新さぼってました。

いろいろネタはあるのですが忙しい毎日を理由の一つとしておきましょう。( ̄。 ̄;)

それと体の調子が良くなくて病に倒れてました。

なんとか復活したので Java8 のエントリーをサクッとポストしようかとがんばってみます。

Java Day Tokyo 2013 が開催されてから日本語での Java8 の情報がちらほら見受けられるようになって嬉しいですね。

ということで、「もっと Lambda」シリーズです。

今回は今まで使ったことが無い flatMap を使ってみます。

実はこの flatMap の使いどころが良く解らずにいたのですが「創る Java」の著者である きしださんのブログにて説明があり、

いくつかのリストを組み合わせて一つのリストを創りたい場合に使えるとのことでした。

JavaDoc を参考までに

flatMap()

java.​util.​stream.​Stream

public Stream flatMap(Function> mapper)

Returns a stream consisting of the results of replacing each element of this stream with the contents of the stream produced by applying the provided mapping function to each element. If the result of the mapping function is null, this is treated as if the result is an empty stream.

This is an intermediate operation.

パラメータ:
mapper – a non-interfering, stateless function to apply to each element which produces a stream of new values

型パラメータ:
R – The element type of the new stream

戻り値:
the new stream

 

早速試してみました。

女性の名前に”さん”をつけるだけのプログラムです。

filter(e -> e.getGender() == Person.Sex.FEMALE) で女性だけ対象として

map(Person::getLastName) で名前でストリームオブジェクトを再構築し、

flatMap(e -> Arrays.asList(e.concat(“さん”)).stream()) で”さん”を付け足して新たにストリームオブジェクトを再構築してできあがり。(^_^)

”さん”を付けるだけのプログラムならこんなことはしなくてもいいけど名前に”さん”を付けたストリームオブジェクトを新たに必要とするときに便利かもしれませんね。

実行結果は期待通りです。

<– Person 表示 –>
柴田 恭平, 61歳, Gender: MALE
壇 蜜, 32歳, Gender: FEMALE
北川 景子, 26歳, Gender: FEMALE
綾瀬 はるか, 28歳, Gender: FEMALE
佐々木 希, 25歳, Gender: FEMALE
剛力 彩芽, 20歳, Gender: FEMALE
小栗 旬, 30歳, Gender: MALE
堀北 真希, 24歳, Gender: FEMALE
武井 咲, 19歳, Gender: FEMALE
市原 隼人, 26歳, Gender: MALE
深田 恭子, 30歳, Gender: FEMALE
蜜さん
景子さん
はるかさん
希さん
彩芽さん
真希さん
咲さん
恭子さん

Java8 のリリースが来年の2月に変更になったようです。

たしか Future Complete が2.3日前の予定だったような・・・

いずれにせよ、早くリリースしてほしいです。

Hatena タグ: