2021/3/16にJava16が出たので、例によって変更点を見てみました。
皆が注目しているrecordやパターンマッチングinstanceofは、まぁいいとして。
きしださんのサイトに載っていた「内部クラスにstaticメンバーが書けるようになった」のって、注目されてないけど意外と大きいと思います。
内部クラスにstaticメソッド、たまに定義したかったんですよねw
Streamに追加されたことで注目されているtoListも確かに便利そうですが。
不変リストなので、可変リスト版も欲しかったところ。今後追加されたら、どういうメソッド名になるのやら^^;
それより、桜庭さんのサイトに載っていたことで初めて知ったのがStreamのmapMultiメソッドです。
桜庭さんのサンプルを見てもいまいちぴんと来なかったんですが、実際に試してみて分かりました。
これは、faltMapと機能は同等で、形式が異なるメソッドなんですね。
・flatMapは、「変換された値を持つStream」を返す形
・mapMultiは、変換された値を「consumerに登録していく」形
Streamを作るのが面倒な場合は、flatMapよりmultiMapの方が便利そうです。
(flatMapでいちいちStreamを作るのが面倒…と批判されていたことに対する答えが、mapMultiなのでしょう)
ただし、flatMapは返す型が引数で分かるので型推論可能ですが、mapMultiのConsumerは型推論できないので型引数を明示しないといけない事があるのが、ちょっと残念な点ですね…。
あと、Integer等のプリミティブ型のラッパークラスのコンストラクターが、Java9から非推奨になっていたらしいんですが、Java16で削除対象(forRemoval=true)になったんですね。
自分はInteger等のコンストラクターは使わないけど、使ってるコードは多そうなので、本当に削除されたらけっこう影響が大きそうですね^^;