JJUGナイトセミナー「JavaエンジニアのためのJava(再)入門セミナー」へ行ってきた

おばんです。mp_hskです。

本日はJJUG(日本Javaユーザーグループ)主催の勉強会、

JavaエンジニアのためのJava(再)入門セミナー」へ行ってきたのでレポートします。

※セミナーの資料は後日公開されるらしいので公開されたらコメントに貼ります

From Old Java To Modern Java

お話の内容としては、古いJava(1.4)から最新のJava 8 までに追加された

新文法について、ソースコードの例を見ながら勉強した。

例のソースコードの内容としては

  • CSVファイルを全件リードし、DTOのリストに詰め替える
  • DTOを渡してCSVファイルの末尾に追加書き込みする
Java 1.4 → Java SE 5.0
  • StringBufferからStringBuilderへの切り替え(スレッドを気にしない環境での性能向上)
  • Listにジェネリクスを使って無駄なキャストを書かないようにする
  • 拡張for分を使ってリストのシーケンシャルアクセスを楽に
  • アノテーションを使ってコンパイラに警告をださせる(@override)

この辺はさすがに自分も知ってた

Java 5.0 → Java 7
  • 複数種類のexceptionのcatch句をまとめる構文が便利
  • ダイアモンド演算子 <> を使えばジェネリクス記法における右辺の型指定を省略できるので積極的に使おう
  • FilesクラスでBufferdReaderとかBufferdWriterなどのIOストリーム系のインスタンス生成が簡単に書けるようになった
  • try with resources(try句の中にファイルオープンなどの処理を書く)で finally句でのクローズが不要になる 

この章では特に try with resourceが大事らしい。C#のusing句で同じことができるけど

Javaにも実装されてたのは知らなかったので覚えておこう。

Java 7 → Java 8
  •  Stringにjoinメソッドができた!
  • Local Date などDate系のクラスが充実した
  • ほかにもちょこちょこ有用なAPIが増えてる

この章では、Java 8 の大きな変更だった Stream APIと Lambda式にはあえて触れずに

ほかにも細かいところ色々変わってるよって紹介でした。

 

以外と知らなかったことが多くて良いセッションでした。

数値計算をたしなむ

このセッションは基本的には、

正確性の求められる計算は BigDecimal 使おうねって話でした。

元金融畑の自分としては目新しい内容はありませんでしたが、

BigDecimalのコンストラクタにはStringかLong渡さないと、丸め後の数値からインスタンス生成されるから意味ねーって話は、昔これでバグ作った経験があるのでニヤリときました。

Stream API入門

Java 8 で追加された Stream APIとLambda式に関するセッションでした。

Lambda式についてはこちらでも書きましたね。

ブログをはじめてみようか(ラムダ式) - mp_hskのブログ

 

Stream APIというのは、(現状では)主にコレクション操作に使うAPI

C#LINQみたいなもんだと理解しました。

使い方は

  1. stream メソッドで streamを作る
  2. 中間操作でstreamを操作する
  3. 終端操作で操作結果を得る

中間操作は以下のようなことができ、1個のstreamに何回もできる

  • フィルターをかけて必要な要素にのみ処理する
  • mapメソッドで要素を置き換える

終端操作は以下のようなことができ、1個のstreamに1回だけ実行できる

  • 操作結果はListやMap,Setインスタンスとして取り出す
  • 操作結果に対して、シーケンシャルに特定の処理を行う(foreach)
  • 操作結果の合計値や平均値を取得する

JavaのStreamは複数の要素に対して一括処理ができなかったり、分岐処理ができなかったりする。

 

セッションの最後で、なぜこれを学ぶべきかということを言っていた。

現状ではほぼコレクションの操作のみなのでぶっちゃけifとforで書いた方が楽な場合も多いが、今後はStreamの内容が固定のデータではない Hot Stream(Httpリクエストとか)を並列でさばいていくためのものに拡張されていくため、考え方を覚えておくといいとのこと。

 

このセッションのStreamAPIは知らなかったし、JavaのLambda式がStream API

ための新文法だったという小話も聞けたので良かった。

 

全体的な感想

web業界に行ってからしばらくPHPばっかりでJavaを触ってなかったけど

(業界移って2年しかたってないのに)結構自分が知ってる頃と変わっていることに驚いた。

7月からまたSIerに戻り、Javaに触れる機会も多くなるため、今後登Java 9なども

含めて新しい機能についてキャッチアップしていくべきだなと思った。