Weitere ähnliche Inhalte Ähnlich wie ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring) (20) ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)2. 2
Speaker Profile
Yuki Fukuda (福田 雄貴)
Financial Service Department, DU(April, 2011-)
• Web Application Engineer
• Team Manager
Java歴: 会社にはいってから
9. 9
May June July August September October
提示されたスケジュール
要件定義・設計
テスト
QA
開発
念のため
テスト
33. 33
Stream API - Streamの始め方(3)
Files#lines(Path path)
ファイル読み書き系のバッチ処理において極めて有能
34. 34
Stream API - Streamのつなぎ方(1)
filter(Predicate<? super T> predicate)
主な用途:
Streamを流れるデータのバリデーション
データの絞り込み
35. 35
Stream API - Streamのつなぎ方(2)
map(Function<? super T, ? extends R> mapper)
36. 36
Stream API - Streamのつなぎ方(3)
peek(Consumer<? super T> action)
特にログを吐くときが便利
業務ロジックを動かすときは使わないこと
※サンプルには書いていますが仕事では使ってません
37. 37
Stream API - Streamの終わり方(1)
よくある事例:
CollectionをStreamとして処理したあと、最後にCollectionに戻したい
39. 39
Stream API - Streamの終わり方(2)
よくある事例:
Streamの各要素をファイルに書き出したい
StreamはAutoCloseableを実装しているので
try-with-resource文のリソースとして利用可能
41. 41
Stream API - いいわけパート
0 0.0005 0.001 0.0015 0.002 0.0025 0.003 0.0035 0.004 0.0045 0.005
while
for
Statement / Step Count
Java SE7
Java SE8
-80% (※当社比)
-85% (※当社比)
43. 43
Stream API - いいわけパート
よくある事例:
実質的final制約に負けた
IDEは結構賢いのでStreamへの変換をサジェストしてきません
45. 45
Stream API - まとめ
実プロジェクトではこれらの事例が複合的に襲ってきますので
for文禁止は弾力的に運用するのがよさそう
「移植したソースを直す時間
がないから」「Streamよくわか
らないから」といった理由で
for文を許可するのはダメ
※今回のプロジェクトでの判断基準は
ラムダ式の -> の右側に{ } が必要になるかどうか
にしました
56. 56
Date and Time API - java.util.Date禁止令
java.util.Date
禁止
※もちろんCalendarも禁止
61. 61
Date and Time API - うるう年判定 (Before)
_人人人人人人人人人人人人人_
> 突然のGregorianCalendar <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
63. 63
Date and Time API - 和暦 (Before)
ロケールに ja_JP_JP をセットすると
JapaneseImperialCalendar のインスタンスを生成する!
66. 66
Date and Time API - 実際の運用(2)
java.util.Dateとの相互変換メソッドを提供する
外部ライブラリの都合で泣く泣くjava.util.Dateを使わされるケースが
多々有ります
69. 69
Date and Time API - 我々が真に獲得したもの
• 変なことをすると例外を吐いてくれる
• Immutable
• スレッドセーフ
• 見た目わかりやすい
という安心感。
84. 84
Optional - ダメな例
Optional#of(T value)はnullを渡すと NullPointerException が発生します
→このメソッドはあまり出番がないです
isPresent() + get() = やってることがnullチェックと同じ
→単純なisPresent()とget()の組み合わせは避けましょう
※isPresent()はifPresent()の処理で例外処理を入れたい場合など、
用途を限って使うのが良いと思います。
91. 91
String#split()
“When there is a positive-width match at the beginning of this string
then an empty leading substring is included at the beginning of the
resulting array. A zero-width match at the beginning however never
produces such empty leading substring.”
英語版Java SE8ドキュメントより引用
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html