https://twitter.com/gakuzzzz/status/958881286755516416
Javaで「Mapの値のみの変換」の話が出る度に「ScalaにはmapValuesがあるのになぁ」とつぶやいてgakuzzzzさんからMapStreamSyntaxを教わるということを繰り返している(※)ので、自分のページにメモった。
※繰り返すといっても、(まだ)2回目のはず…!^^;
https://twitter.com/t_wada/status/907045767579185152
https://twitter.com/t_wada/status/907057690068664320という話がありまして。
opengl-8080さんとかかずひらさんとかそのうち書くかもしれないしmike-neckさんとか既に色々書いているようだけど、自分もJUnit5を試してみた。
JUnit4ではhamcrestを使ってassertThat(actual, is(expected))だったけど、結局この方式ではなくassertEqualsを使う方式に戻った雰囲気。
ただ、インポートすべきパッケージ名は変わったし、メッセージを入れる位置が第1引数から最後の引数に変わったので、従来のテストクラスがそのまま使えるわけではない。
例外のテスト(assertThrows)
タイムアウト(一定時間内に終わる事)のテスト(assertTimeout)
パラメーターを渡すテスト(ParameterizedTest)
なんかは綺麗に書けるようになった。
現時点ではEclipseはベータ対応だし、AsakusaFWもJUnit4のままだが^^;、
新しく作るプロジェクトならJUnit5にしてもいいかも。
ひょんな事からJava版Sparkをいじる機会があって、JavaRDDのmapメソッドにラムダ式を渡したら通るのにメソッド参照を渡したら実行時に例外が発生するという事態にぶち当たった。
これはラムダ式とメソッド参照の挙動の違いを発見か?!と思ったが、結果的にはEclipseのバグだった。
で、そのバグを再現する最小限のプログラムを作ろうとしたら、別の挙動(これもEclipseのバグ)に当たってしまった。
(前者はメソッド参照のシリアライズに関するEclipse新バージョンのバグで、後者は旧バージョンのバグ。バグを修正したら新しいバグが生まれてしまった感じに見える^^;)
これに関連して、ashigeruさんからメソッド参照のキャプチャーに関する話を聞いたが、これは知らなかった。知らないとハマることがありそう。
dentomoさんから『Java本格入門』を頂きました。ありがとうございます。
(著者は谷本心さんを始めとするAcroquest Technology株式会社の方々ですが、編集がdentomoさんのようです)
なんと、p.436の参考文献に、そうそうたる本に混じって自分のウェブページのURLが載っています! うわ~嬉し恥ずかしw
(「この本を読んだ人たちが次に参考に出来るサイト」という意味かなーと思ったら、書いた人が本当に参考にしていたみたいです^^;)
このJava本格入門、入門の名の通りJavaの基本的な文法も扱っていますが、そこからさらに、よく使われるライブラリーやJavaで開発するために知っておいた方が良いこと(デザインパターン・ログ出力・JUnit、果ては例外の使い方やマルチスレッドに関する注意点・Checkstyle/Findbugs等)についてまで載っています。
まさに仕事でJavaを扱う人なら知っておいて欲しい内容です。
(まぁ僕自身はFindbugsとか使ってないんですが(爆)、例えばAsakusa Frameworkのソースはそれでチェックされています)
本書のJavaのバージョンはJava8ですが、従来のバージョンで普通に使われていたライブラリーも新しいライブラリーも載っています。例えばFileとPath、Date/CalendarとDate and Time APIなど。
各章のコード例や末尾に載っている応用に関する話題等も参考になります。例えばp.145のConcurrentHashSetの件とか知りませんでしたし、p.171のmapToObj(i -> "?")
も、なるほどiを無視する使い方もあるか!と思いました。
また、あまり良くない入門書だと「その説明だとちょっと違うんだよな~」という違和感があったりするのですが、本書にはそういう違和感がありませんでした。
レビュー陣がよほど厳しかった素晴らしかったのでしょうw
Java本格入門は、Java8を対象とした入門書としてとても良いのではないでしょうか^^