Java SE 8で文字列連結が便利になった!
ただいま、Java SE 8研修の開発中です。
Java SE 8では、文字列の連結がやりやすいAPIが追加されています。
例えば、配列の各要素をカンマで区切って、1つの文字列に連結するプログラムは、Java SE 7までならこんな感じだったと思います。
出力は「aaa,bbb,ccc」となります。
StringBuilder使ってappend()して。
また、カンマをappend()する際は、最後の要素の時はカンマを付けないという条件分岐が必要です。
これが、Java SE 8で追加されたString.join()メソッドを使うと、こうなります。
8行で書いてたコードが1行になりました。かなり簡単ですね。
もう少し複雑な例を考えます。
配列の各要素を連結するとともに、各要素に [ ] というプレフィックス・サフィックスを付けます。また、配列の要素数が0の場合、空文字にします。
Java SE 7までならこうなります。
出力は「[aaa],[bbb],[ccc]」となります。
うーん、かなり長くて複雑です。
これが、Java SE 8で追加されたjava.util.StringJoinerクラスを使うと、こうなります。
13行が6行になりました。また、条件分岐がなくなり、かなり読みやすいです。
setEmptyVaule()というメソッドがあるおかげで、要素数が0の時に出力が「 [ ] 」とはならず、空文字になります。
★2014/08/11追記
上記のコードではfor文使ってたので、ラムダ式とStream API使って書き直してみました。
メソッド参照使うと、
forEach(joiner::add)
となります。
パフォーマンスまで含めた文字列連結に関する実験結果は、きしださんがブログでまとめられています。
ラムダ式・Stream API・Date and Time APIなどに目が行きがちなJava SE 8ですが、他にも色々と便利な変更が加えられていますね。