Java SE 8で文字列連結が便利になった!

ただいま、Java SE 8研修の開発中です。

 

Java SE 8では、文字列の連結がやりやすいAPIが追加されています。

例えば、配列の各要素をカンマで区切って、1つの文字列に連結するプログラムは、Java SE 7までならこんな感じだったと思います。

f:id:MasatoshiTada:20140808121044p:plain

出力は「aaa,bbb,ccc」となります。

StringBuilder使ってappend()して。

また、カンマをappend()する際は、最後の要素の時はカンマを付けないという条件分岐が必要です。

 

これが、Java SE 8で追加されたString.join()メソッドを使うと、こうなります。

f:id:MasatoshiTada:20140808121145p:plain

8行で書いてたコードが1行になりました。かなり簡単ですね。

 

もう少し複雑な例を考えます。

配列の各要素を連結するとともに、各要素に [ ] というプレフィックス・サフィックスを付けます。また、配列の要素数が0の場合、空文字にします。

Java SE 7までならこうなります。

f:id:MasatoshiTada:20140808121409p:plain

出力は「[aaa],[bbb],[ccc]」となります。

うーん、かなり長くて複雑です。

 

これが、Java SE 8で追加されたjava.util.StringJoinerクラスを使うと、こうなります。

f:id:MasatoshiTada:20140808121618p:plain

13行が6行になりました。また、条件分岐がなくなり、かなり読みやすいです。

setEmptyVaule()というメソッドがあるおかげで、要素数が0の時に出力が「 [ ] 」とはならず、空文字になります。

 

★2014/08/11追記

上記のコードではfor文使ってたので、ラムダ式とStream API使って書き直してみました。

f:id:MasatoshiTada:20140811172502p:plain

メソッド参照使うと、

forEach(joiner::add)

となります。

 

 

パフォーマンスまで含めた文字列連結に関する実験結果は、きしださんがブログでまとめられています。

Java8時代の文字列連結まとめ - きしだのはてな

 

ラムダ式・Stream API・Date and Time APIなどに目が行きがちなJava SE 8ですが、他にも色々と便利な変更が加えられていますね。