Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1 祝 Java SE 8 祝祝祝祝祝祝 Yoshio Terada Java Evangelist http://yoshio3.com Twitter : @yoshioterada
Copyright copy 2014 Oracle andor its affiliates All rights reserved1
祝 Java SE 8 正式リリース
Yoshio TeradaJava Evangelisthttpyoshio3comTwitter yoshioterada
Copyright copy 2014 Oracle andor its affiliates All rights reserved2
以下の事項は弊社の一般的な製品の方向性に関する概要を説明するものですまた情報提供を唯一の目的とするものでありいかなる契約にも組み込むことはできません以下の事項はマテリアルやコード機能を提供することをコミットメント(確約)するものではないため購買決定を行う際の判断材料になさらないで下さいオラクル製品に関して記載されている機能の開発リリースおよび時期については弊社の裁量により決定されます
Oracle は米国オラクルコーポレーション及びその子会社関連会社の米国及びその他の国における登録商標です文中の社名商品名等は各社の商標または登録商標である場合があります
Copyright copy 2014 Oracle andor its affiliates All rights reserved3
Java SE 6 Java SE 7 Java SE 8 Java SE 9
2006 年 12 月 2011 年 07 月 2014 年 03 月 2016 年
Java リリースの歴史
Copyright copy 2014 Oracle andor its affiliates All rights reserved4
Java SE 6
2006 年 12 月
Java SE 6 の新機能
2006 年 12 月 11 日
Java SE 5 を改良したバージョン Web サービス JavaScript エンジン Rhino を組み込み AWTSwing ライブラリの改善 Java DB の統合 JDBC の改善 など
Copyright copy 2014 Oracle andor its affiliates All rights reserved5
Java SE 7
2011 年 07 月
Java SE 7 がリリースされるまで
2010 年 9 月 8 日タイトル Re-thinking JDK 7
Plan A JDK 7 (as currently defined) Mid 2012
Plan B JDK 7 Mid 2011 (minus Lambda Jigsaw and part of Coin) JDK 8 Late 2012 (Lambda Jigsaw the rest of Coin ++)
Plan B 早く実装が可能な一部機能を先にリリース
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved2
以下の事項は弊社の一般的な製品の方向性に関する概要を説明するものですまた情報提供を唯一の目的とするものでありいかなる契約にも組み込むことはできません以下の事項はマテリアルやコード機能を提供することをコミットメント(確約)するものではないため購買決定を行う際の判断材料になさらないで下さいオラクル製品に関して記載されている機能の開発リリースおよび時期については弊社の裁量により決定されます
Oracle は米国オラクルコーポレーション及びその子会社関連会社の米国及びその他の国における登録商標です文中の社名商品名等は各社の商標または登録商標である場合があります
Copyright copy 2014 Oracle andor its affiliates All rights reserved3
Java SE 6 Java SE 7 Java SE 8 Java SE 9
2006 年 12 月 2011 年 07 月 2014 年 03 月 2016 年
Java リリースの歴史
Copyright copy 2014 Oracle andor its affiliates All rights reserved4
Java SE 6
2006 年 12 月
Java SE 6 の新機能
2006 年 12 月 11 日
Java SE 5 を改良したバージョン Web サービス JavaScript エンジン Rhino を組み込み AWTSwing ライブラリの改善 Java DB の統合 JDBC の改善 など
Copyright copy 2014 Oracle andor its affiliates All rights reserved5
Java SE 7
2011 年 07 月
Java SE 7 がリリースされるまで
2010 年 9 月 8 日タイトル Re-thinking JDK 7
Plan A JDK 7 (as currently defined) Mid 2012
Plan B JDK 7 Mid 2011 (minus Lambda Jigsaw and part of Coin) JDK 8 Late 2012 (Lambda Jigsaw the rest of Coin ++)
Plan B 早く実装が可能な一部機能を先にリリース
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved3
Java SE 6 Java SE 7 Java SE 8 Java SE 9
2006 年 12 月 2011 年 07 月 2014 年 03 月 2016 年
Java リリースの歴史
Copyright copy 2014 Oracle andor its affiliates All rights reserved4
Java SE 6
2006 年 12 月
Java SE 6 の新機能
2006 年 12 月 11 日
Java SE 5 を改良したバージョン Web サービス JavaScript エンジン Rhino を組み込み AWTSwing ライブラリの改善 Java DB の統合 JDBC の改善 など
Copyright copy 2014 Oracle andor its affiliates All rights reserved5
Java SE 7
2011 年 07 月
Java SE 7 がリリースされるまで
2010 年 9 月 8 日タイトル Re-thinking JDK 7
Plan A JDK 7 (as currently defined) Mid 2012
Plan B JDK 7 Mid 2011 (minus Lambda Jigsaw and part of Coin) JDK 8 Late 2012 (Lambda Jigsaw the rest of Coin ++)
Plan B 早く実装が可能な一部機能を先にリリース
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved4
Java SE 6
2006 年 12 月
Java SE 6 の新機能
2006 年 12 月 11 日
Java SE 5 を改良したバージョン Web サービス JavaScript エンジン Rhino を組み込み AWTSwing ライブラリの改善 Java DB の統合 JDBC の改善 など
Copyright copy 2014 Oracle andor its affiliates All rights reserved5
Java SE 7
2011 年 07 月
Java SE 7 がリリースされるまで
2010 年 9 月 8 日タイトル Re-thinking JDK 7
Plan A JDK 7 (as currently defined) Mid 2012
Plan B JDK 7 Mid 2011 (minus Lambda Jigsaw and part of Coin) JDK 8 Late 2012 (Lambda Jigsaw the rest of Coin ++)
Plan B 早く実装が可能な一部機能を先にリリース
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved5
Java SE 7
2011 年 07 月
Java SE 7 がリリースされるまで
2010 年 9 月 8 日タイトル Re-thinking JDK 7
Plan A JDK 7 (as currently defined) Mid 2012
Plan B JDK 7 Mid 2011 (minus Lambda Jigsaw and part of Coin) JDK 8 Late 2012 (Lambda Jigsaw the rest of Coin ++)
Plan B 早く実装が可能な一部機能を先にリリース
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved6
Java SE 7
2011 年 07 月
Java SE 7 の新機能
開発生産性向上と Java SE 8 の準備
Project Coin Java NIO2 ForkJoin Framework InvokeDynamic バイトコード命令
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved7
Java SE 8
2014 年 03 月
Java SE 8 リリースまでの道のり 1
2012 年 7 月 17 日タイトル Project Jigsaw Late for the train
I think the best choice is to defer Project Jigsaw to Java 9 and to aim for a two-year release cycle going forward
On this plan Java 8 will ship on time around September 2013
Jigsaw の検討実装検証に時間が足りないため次の Java SE 9 へ持ち越し
Java SE 8
2013 年 9 月
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved8
Java SE 8 リリースまでの道のり 2
2013 年 4 月 18 日タイトル Java 8 Secure the train
As a consequence of this renewed focus on security the Java 8 schedule with a GA release in early September is no longer achievable
then resume a regular two-year release cadence with Java 8 due in early 2014 and Java 9 in early 2016Java 開発者がセキュリティ脆弱性対応に集中しリリース日を 2013 年 9 月から 2014 年初旬に変更
Java SE 8
2014 年初旬
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved9
Java SE 8 リリースまでの道のり 3
2013 年 4 月 26 日タイトル Java 8 Hold the train
The target release date for Java 8 is now 2014318
Java SE 8
2014 年 03月
最終的なリリース予定日を 318 に決定
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved10
祝 Java SE 8 正式リリース2014 年 03 月 18 日
Copyright copy 2014 Oracle andor its affiliates All rights reserved11
JSR- 337 Java SE 8
Compact Profile
JavaScript JSR-308 Type AnnotationJSR-310 Date and Time
Copyright copy 2014 Oracle andor its affiliates All rights reserved12
Java SE 7 と Java SE 8 の関係
Java SE 7 の主要な新機能
Project CoinJava NIO2
ForkJoin FrameworkInvokeDynamic
Java SE 8 の主要な新機能
Lambda 式Stream APINashorn (JavaScript)
利用と改善
Date amp Time APIType AnnotationCompact ProfileJavaFX の統合Java VM の統合
Copyright copy 2014 Oracle andor its affiliates All rights reserved13
Project Lambda
Lambda 式
Streaming API
Copyright copy 2014 Oracle andor its affiliates All rights reserved14
SPARC T1 (2005年 )8 x 4 =
32SPARC T2 (2007年 )8 x 8 =
64SPARC T3 (2011年 )16 x 8 =
128
マルチコア時代
Copyright copy 2014 Oracle andor its affiliates All rights reserved15
Java SE 7 で導入ForkJoin フレームワークの概念 ( 粒度小 )
大きな問題を細かい問題に分割し分割した問題を個別に解決した後最後に結果を集計
大きな問題
細かい
問題
細かい
問題
細かい
問題
個別
処理
個別
処理
個別
処理
結合結果
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved12
Java SE 7 と Java SE 8 の関係
Java SE 7 の主要な新機能
Project CoinJava NIO2
ForkJoin FrameworkInvokeDynamic
Java SE 8 の主要な新機能
Lambda 式Stream APINashorn (JavaScript)
利用と改善
Date amp Time APIType AnnotationCompact ProfileJavaFX の統合Java VM の統合
Copyright copy 2014 Oracle andor its affiliates All rights reserved13
Project Lambda
Lambda 式
Streaming API
Copyright copy 2014 Oracle andor its affiliates All rights reserved14
SPARC T1 (2005年 )8 x 4 =
32SPARC T2 (2007年 )8 x 8 =
64SPARC T3 (2011年 )16 x 8 =
128
マルチコア時代
Copyright copy 2014 Oracle andor its affiliates All rights reserved15
Java SE 7 で導入ForkJoin フレームワークの概念 ( 粒度小 )
大きな問題を細かい問題に分割し分割した問題を個別に解決した後最後に結果を集計
大きな問題
細かい
問題
細かい
問題
細かい
問題
個別
処理
個別
処理
個別
処理
結合結果
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved13
Project Lambda
Lambda 式
Streaming API
Copyright copy 2014 Oracle andor its affiliates All rights reserved14
SPARC T1 (2005年 )8 x 4 =
32SPARC T2 (2007年 )8 x 8 =
64SPARC T3 (2011年 )16 x 8 =
128
マルチコア時代
Copyright copy 2014 Oracle andor its affiliates All rights reserved15
Java SE 7 で導入ForkJoin フレームワークの概念 ( 粒度小 )
大きな問題を細かい問題に分割し分割した問題を個別に解決した後最後に結果を集計
大きな問題
細かい
問題
細かい
問題
細かい
問題
個別
処理
個別
処理
個別
処理
結合結果
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved14
SPARC T1 (2005年 )8 x 4 =
32SPARC T2 (2007年 )8 x 8 =
64SPARC T3 (2011年 )16 x 8 =
128
マルチコア時代
Copyright copy 2014 Oracle andor its affiliates All rights reserved15
Java SE 7 で導入ForkJoin フレームワークの概念 ( 粒度小 )
大きな問題を細かい問題に分割し分割した問題を個別に解決した後最後に結果を集計
大きな問題
細かい
問題
細かい
問題
細かい
問題
個別
処理
個別
処理
個別
処理
結合結果
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved15
Java SE 7 で導入ForkJoin フレームワークの概念 ( 粒度小 )
大きな問題を細かい問題に分割し分割した問題を個別に解決した後最後に結果を集計
大きな問題
細かい
問題
細かい
問題
細かい
問題
個別
処理
個別
処理
個別
処理
結合結果
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved16
ここで登場 Lambda
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved17
Lambda 式とは
後から実行するコードブロックの実装を簡潔に記述するための手法
( 匿名インナークラスの簡易記法+ α)
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved18
Functional( 関数型 ) インタフェース
FunctionalInterfacepublic interface Runnable public abstract void run()
実装すべきメソッドが一つのインタフェースLambda 式 ( メソッド参照)のターゲット型
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved19
Functional( 関数型 ) インタフェース
javalangRunnablejavaniofilePathMatcherjavautilComparatorjavautilconcurrentCallablejavautilloggingFilter
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved20
javautilfunction パッケージ
httpdocsoraclecomjavasejp8apijavalangclass-useFunctionalInterfacehtml
Java SE 8 より追加 43 個の関数型インタフェースを含む
インタフェース名 引数 返り値 説明PredicateltTgt T boolean 1 つの引数を受け取り boolean を返すConsumerltTgt T void 1つの引数を受け取り結果を返さないFunctionltTRgt T R 1 つの引数を受け取り結果を生成するSupplierltTgt 無し T 完了結果の取得UnaryOperationltTgt T T 単項演算(引数と返り値が同じ)BinaryOperationltTgt (T T) T 2項演算(引数を2つ取り返り値が同
じ)
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved21
これは関数型インタフェース
FunctionalInterfacepublic interface SomeFunctionalInterface public boolean equals(Object object)
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved22Copyright copy 2014 Oracle andor its affiliates All rights reserved22
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
1 匿名インナークラスとして実装
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved23Copyright copy 2014 Oracle andor its affiliates All rights reserved23
ExecutorService service = servicesubmit(new Runnable() Override public void run() 非同期に処理するタスク doSomething() )
-gt
2 インナークラス名メソッド名を削除 メソッドの引数とメソッドボディの間に -gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved24Copyright copy 2014 Oracle andor its affiliates All rights reserved24
ExecutorService service =
servicesubmit(() -gt doSomething())
単一の abstract メドッドを持つ関数型インタフェースを書き換え可能
Java SE 8 ラムダ式
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved25Copyright copy 2014 Oracle andor its affiliates All rights reserved25
このコードはどこが問題 (JavaSE7)
int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
エラー ローカル変数 a は内部クラスからアクセスされます final で宣言される必要があります
final int a = 0
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved26Copyright copy 2014 Oracle andor its affiliates All rights reserved26
Java SE 8 は実質的に final ならば可 int a = 0 Runnable run = new Runnable() Override public void run() Systemoutprintln(a) ExecutorService exec = ExecutorsnewSingleThreadExecutor() execsubmit(run)
更新されない値 ( 実質的に final) の参照ならばコンパイルエラーにはなりません
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved27
Stream API
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved28Copyright copy 2014 Oracle andor its affiliates All rights reserved28
拡張 for 文による操作 (JavaSE7) ListltStringgt list = ArraysasList(aaa bbb ccc abc)
for (String data list) if (datastartsWith(a)) Systemoutprintln(data)
先頭が a で始まる文字列を出力
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved29
Stream API とは
コレクションに対するバルク ( 一括 ) 処理が可能
Lambda 式を使用し可読性向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved30
Stream API による実装 ( パイプライン処理 )終端操作が呼び出されるまで処理は未実行
Stream の生成
Streamof()Streamempty()Streamgenerate()liststream()
中間操作
filtermapmapToIntflatMapdistinctsortedlimitskip など
終端操作
forEachforEachOrderedtoArrayreducecollectminmaxcountなど
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved31Copyright copy 2014 Oracle andor its affiliates All rights reserved31
Stream の生成
Stream stream = Streamof(aaa bbb cccrdquo rdquoabcrdquo)
ListltStringgt list = ArraysasList(aaa bbb ccc ldquoabcrdquo)Stream listStream = liststream()
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved32Copyright copy 2014 Oracle andor its affiliates All rights reserved32
Stream API による操作 (JavaSE8)
ListltStringgt list = ArraysasList(aaa bbb ccc abc)
liststream() filter(Predicatelt super Tgt predicate) forEach(Consumerlt super Tgt action)
if 文を filter で置き換えfor 文を forEach で置き換え
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved33Copyright copy 2014 Oracle andor its affiliates All rights reserved33
PredicateConsumer インタフェース
FunctionalInterfacepublic interface PredicateltTgt boolean test(T t)
FunctionalInterfacepublic interface ConsumerltTgt void accept(T t)
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved34Copyright copy 2014 Oracle andor its affiliates All rights reserved34
Stream によるコレクション操作匿名インナークラスで実装 ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved35Copyright copy 2014 Oracle andor its affiliates All rights reserved35
Lambda 式に変換メソッドの引数とボディを残し間に矢印 -gt を挿入
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved36Copyright copy 2014 Oracle andor its affiliates All rights reserved36
型推論の改善型情報 (String) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved37Copyright copy 2014 Oracle andor its affiliates All rights reserved37
メソッド引数部分の括弧 () の省略単一引数の場合 () を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved38Copyright copy 2014 Oracle andor its affiliates All rights reserved38
単一行のブロックを省略単一行の場合ブロック (return) を省略可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved39
メソッド参照コンストラクタ参照
Lambda 式で単に既存のメソッドを呼び出す場合メソッド参照の記法で簡易的に記述可能
(String data) -gt Systemoutprintln(data)
Systemoutprintln
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved40
メソッド参照コンストラクタ参照
ラムダ式 メソッド参照 メソッド参照の種類() -gt ClassstaticMethod()
ClassstaticMethod
クラスの static メソッドへの参照
() -gt objectmethod() objectmethod オブジェクトのインスタンスメソッドへの参照
t -gt tmethod() Classmethod 同一クラス任意オブジェクトのインスタンスメソッドへの参照
() -gt new Class() Classnew コンストラクタへの参照
引数が存在する場合宣言順に渡される
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved41Copyright copy 2014 Oracle andor its affiliates All rights reserved41
メソッド参照による書き換え
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(new PredicateltStringgt() public boolean test(String data) return datastartsWith(a) ) forEach(new ConsumerltStringgt() public void accept(String data) Systemoutprintln(data) )
-gt
-gt
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved42Copyright copy 2014 Oracle andor its affiliates All rights reserved42
Lambda 式 と Stream API 最終形式 Lambda 式により簡潔に記述可能
ListltStringgt list = ArraysasList(aaa bbb ccc abc) liststream() filter(data -gt datastartsWith(ardquo)) forEach(Systemoutprintln)
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved43Copyright copy 2014 Oracle andor its affiliates All rights reserved43
例題俳優のフィルタリング
public class Actor Integer id ID String firstName 名前 String lastName 名字 Integer age 年齢 String prefecture 出身の都道府県名 hellip コンストラクタ Setter Getter は省略
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved44Copyright copy 2014 Oracle andor its affiliates All rights reserved44
例題大河ドラマ(官兵衛)出演俳優
ListltActorgt users = ArraysasList( new Actor(1 ldquo岡田rdquo ldquo准一rdquo 33 ldquo 大阪府rdquo ) new Actor(2 ldquo柴田rdquo ldquo恭兵rdquo 62 ldquo静岡県rdquo ) new Actor(3 ldquo江口rdquo ldquo洋介rdquo 46 ldquo東京都rdquo ) new Actor(4 ldquo竹中rdquo ldquo直人rdquo 58 ldquo神奈川県rdquo ) new Actor(5 谷原 章介rdquo 41 ldquo神奈川県rdquo ) new Actor(6 春風亭 小朝rdquo 59 ldquo東京都rdquo ) new Actor(7 寺尾 聰rdquo 67 ldquo神奈川県rdquo ) new Actor(8 速水 もこみちrdquo 29 ldquo東京都rdquo ) new Actor(9 片岡 鶴太郎rdquo 59 ldquo東京都rdquo ) new Actor(10 ldquo金子 ノブアキrdquo 33 ldquo東京都rdquo ))
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved45Copyright copy 2014 Oracle andor its affiliates All rights reserved45
例題年齢順にソートusersstream() sorted( 年齢順にソート (act1 act2) -gtact1agecompareTo(act2age)) forEach(Systemoutprintln)
8 速水 もこみち 29 東京都1 岡田 准一 33 大阪府10 金子 ノブアキ 33 東京都5 谷原 章介 41 神奈川県3 江口 洋介 46 東京都4 竹中 直人 58 神奈川県6 春風亭 小朝 59 東京都9 片岡 鶴太郎 59 東京都2 柴田 恭兵 62 静岡県7 寺尾 聰 67 神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved46Copyright copy 2014 Oracle andor its affiliates All rights reserved46
例題出身県名一覧の表示
usersstream() map(actor -gt actorgetPrefecture()) distinct() 重複文字列を削除 forEach(Systemoutprintln)
map () Actor から String オブジェクト (出身地の県名 ) を取得し新たな Stream を生成
大阪府静岡県東京都神奈川県
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved47Copyright copy 2014 Oracle andor its affiliates All rights reserved47
例題出身県名一覧の取得 (List)
ListltStringgt prefectures = user2stream() map(actor -gt actorgetPrefecture()) distinct() collect(CollectorstoList())
collect () Stream の処理結果別のオブジェクト (List Set Map など ) で値を取得したい場合 collect() を使用
ユーティリティファクトリクラス Collectors
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved48Copyright copy 2014 Oracle andor its affiliates All rights reserved48
例題 40歳以上の人数を取得
long count = user2stream() filter(actor -gt actorage gt 40) count()Systemoutprintln(40歳以上はrdquo + count+ 名 )
40 歳以上は 7 名
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved49
Lambda 式ご利用時のご注意
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved50
Lambda ご使用時の注意
Lambda 式は匿名インナークラスの書き方を単に書きかえた物ではありません
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved51
1 匿名インナークラスを実装したクラス
import javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier supplier = new Supplier() Override public String get() return Hello
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved52
1 匿名インナークラスを含むクラスを コンパイルgt javac Testjavagt lsTest$1classTestclassTestjava
匿名インナークラスを含むクラスをコンパイルするとクラス名 $class を生成
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved53
1 匿名インナークラスを使用した場合
gt javap -c Test
public static void main(javalangString) Code 0 new 2 class Test$1 3 dup 4 invokespecial 3 Method Test$1ltinitgt()V 7 astore_1 8 return
実行時インスタンスを生成して呼び出す
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved54
1 Lambda 式を含むクラスを コンパイルimport javautilfunctionSupplierpublic class Test public static void main(String argv) Supplier s = () -gt Hello
gt javac Testjavagt lsTestclassTestjava Test$1class クラスは未作成
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved55
gt javap -p Test
Compiled from Testjavapublic class Test public Test() public static void main(javalangString) private static javalangObject lambda$main$0()
1 生成されたクラスを確認
Lambda 式を使用すると同一クラス内にプライベートメソッドを追加
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved56
1 内部的に InvokeDyanamic を使用
gt javap -c Test
public static void main(javalangString) Code 0 invokedynamic 2 0 InvokeDynamic 0get()LjavautilfunctionSupplier 5 astore_1 6 return
Lambda 式を使用すると内部的に Java SE 7 で追加された InvokeDynamic バイトコード命令を実行
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved57
2 ボディ内で this スコープの違い
SupplierltStringgt anInner = new SupplierltStringgt() Override public String get() return thisgetClass()toString() CompletableFuturesupplyAsync(anInner)thenAccept(Systemoutprintln)
SupplierltStringgt lambda = () -gt thisgetClass()toString()CompletableFuturesupplyAsync(lambda)thenAccept(Systemoutprintln)
Test$1 を返す
Test を返す
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved58
Java SE 8 CompletableFuture
Java SE 8 で導入されたCompletableFuture
+Java EE 7 で導入されたConcurrency Utilities
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved59
その他本資料で説明していない項目
bull プリミティブ型の Stream (IntStream など )
bull Parallel Stream (Parallel Aray)bull Stream の全機能bull Optional Typebull 例外ハンドリングbull デフォルトメソッドbull インタフェース内の static メソッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved60
参考情報
bull IT Pro 連載記事「詳解 Java SE 8」をご参照httpitpronikkeibpcojparticleCOLUMN20140212536246
bull JJUG 「祝 Java 8 Launch」httpwwwjava-usersjpp=917
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved61
JSR- 310 Date amp Time API
日付処理の開発容易性が向上
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved62
Date amp Time API の目的
javautilDatejavautilCalendarjavautilTimeZonejavatextDateFormat
これらの API の置き換え用の新しい API を定義イミュータブルスレッドセーフISO-8601 の国際標準規格に準拠
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved63
Date amp Time API の主要なクラス
LocalDateTime
LocalDate LocalTime
人間的 ( 日時 )
ZonedDateTime
Instantシステム的 (瞬間 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved64
プログラムでどのような時間処理が必要
どれを利用するかは処理内容によって選ぶ必要があり
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved65
LocalDateタイムゾーン時間情報は無し LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
警告
3週間前
新しいカード送信
3週間前の午前2時
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved66
LocalDate現在の年月日を取得 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日LocalDate regDate = LocalDatenow()
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved67
LocalDate年月日の加減処理 (plus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved68
LocalDate年月日の前後比較 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
作成
2014 年 6 月 14日
有効期間
2017 年 6 月 14日
有効期間 3 年間期限切れ
2018 年 1 月 1 日
LocalDate regDate = LocalDatenow()LocalDate expireDate = regDateplusYears(3)LocalDate afterDate = LocalDateof(2018 1 1)if (expireDateisBefore(afterDate)) hellip
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved69
LocalDate年月日の加減処理 (minus) LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
有効期間
2017 年 6 月 14日
警告
3週間前
LocalDate expireDate = regDateplusYears(3)LocalDate warnDate = expireDateminusWeeks(3)
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved70
LocalDate年月日の調整 TemporalAdjuster
import static javatimetemporalTemporalAdjusterslastDayOfMonthhellipLocalDate regDate = LocalDatenow()LocalDate lastDay = regDatewith(TemporalAdjusterslastDayOfMonth)LocalDate lastDay = regDatewith(lastDayOfMonth) スッキリ
import static javatimetemporalTemporalAdjustersnextimport static javatimeDayOfWeekMONDAYhellipLocalDate regDate = LocalDatenow()LocalDate nextMonDay = regDatewith(TemporalAdjustersnext(DayOfWeekMONDAY))LocalDate nextMonDay2 = regDatewith(next(DayOfWeekMONDAY))LocalDate nextMonDay3 = regDatewith(next(MONDAY)) スッキリ
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved71
LocalDate年月日に時間情報を付加 LocalDateTime
LocalDate LocalTime
日本で使用するクレジットカードの作成から有効期限まで
警告日付
3週間前
新しいカード送信
3週間前の午前2時
LocalDate warnDate = expireDateminusWeeks(3)LocalDateTime sendCardDateTime = warnDateatTime(2 0)
LocalDate から LocalDateTime への変換
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved72
LocalDatePeriod 日付間の差を取得 LocalDateTime
LocalDate LocalTime
Period period = Periodbetween(regDate warnDate)Long days = ChronoUnitDAYSbetween(regDate warnDate)Systemoutprintln( 警告送信まで + periodgetYears() + 年 + periodgetMonths() + ヶ月 + periodgetDays() + 日 ( + days + 日 ))
警告送信まで 2 年 11ヶ月 10 日 (1075 日 )
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved73
LocalTime時間処理タイムゾーン日付無し LocalDateTime
LocalDate LocalTime
LocalTime lTime = LocalTimenow()LocalTime noon = LocalTimeof(12 00)if (lTimeisAfter(noon)) LocalTime dinnerTime = noonplusHours(8)minusMinutes(30)withNano(0)LocalTime trunTime = lTimetruncatedTo(ChronoUnitMINUTES)LocalDateTime ldateTime = lTimeatDate(LocalDatenow())
タイムゾーン日付の情報が不要なナノ秒単位の時間操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved74
LocalDateTimeタイムゾーン情報無し LocalDateTime
LocalDate LocalTime
タイムゾーンが不要な日時処理
2014 年 06 月 25 日午後 6 時
2015 年 01 月 01 日午前 0 時
正月まで 6ヶ月+6日+6時間
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved75
LocalDateTimeLocalDate + LocalTime LocalDateTime
LocalDate LocalTime
LocalDateTime today = LocalDateTimenow() LocalDateTime today = LocalDateTimeof(2014 MonthJUNE 25 18 0)2014-06-25T180000LocalDateTime nextNewYear = todayplusMonths(6)plusDays(6)plusHours(6)2015-01-01T0000LocalDateTime firstMonday = newYear2with(next(MONDAY))2015-01-05T0000
タイムゾーン情報が不要な日時操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved76
Instant
Instant start = Instantnow()bar()Instant end = Instantnow()
Instant の比較には Duration を使用Duration dur = Durationbetween(start end)long mills = durtoMillis()Systemoutprintln( メソッドの実行時間 + mills)
ある瞬間における時間を扱う
Instant瞬間の時間を操作
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved77
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)ZoneId jap = ZoneIdof(AsiaTokyo)ZonedDateTime jpTimeZone = ZonedDateTimeof(startJUG jap)2014-07-25T1800+0900[AsiaTokyo]String format = DateTimeFormatter ofPattern(yyyyMMdd(E) a HHmm)format(jpTimeZone)20140725( 金 ) 午後 1800ZoneId los = ZoneIdof(AmericaLos_Angeles) ZonedDateTime losTimeZone = jpTimeZonewithZoneSameInstant(los)2014-07-25T0200-0700[AmericaLos_Angeles]
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved78
ZonedDateTime
LocalDateTime startJUG = LocalDateTimeof(2014 MonthJULY 25 18 00)
String formatter2 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日 (E) a HHmm)format(jpStartDateTime)
西暦 2014 年 07 月 25 日 ( 月 ) 午後 1800
JapaneseDate jdate = JapaneseDatefrom(startJUG) String formatter3 = DateTimeFormatterofPattern(Gy 年 MM 月 dd 日(E))format(jdate)
平成 26 年 07 月 25 日 ( 水 ) ( ISO-8601 での実装を推奨)
LocalDateTime + ZoneId (UTC からのオフセット )
ZonedDateTimeタイムゾーンを含む日時を扱う
日時の加減演算でサマータイム対応
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved79
IoT の時代に Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved80
今後 10 年
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved81
500億のデバイス
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved82
全てが繋がる時代へ
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved83
Java SE 8 Compact プロファイル
各 API にどのプロファイルで利用可能か記載されている
参考 httpsblogsoraclecomjtcentrya_first_look_at_compact
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved84
デモ
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved85
IoT with WebSocket
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved86
LEGO(Java SE Embedded) amp Java EE 7WebSocket デモの構成
GlassFish v401Java SE8EE 7
Java SE8Embedded
LEGO MindStorms の操作命令を送信
LEGO MindStorms の状態情報を送信
WebSocketLEGO
エンドポイント
WebSocketサーバ
エンドポイント
WebSocketブラウザ
エンドポイント
JSON
JSON
JSON
JSON
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved87
ブラウザから LEGO マインドストームを操作WebSocket でリアムタイム IoT 通信
ブラウザからの命令 前後左右への移動 停止スピードアップダウン
LEGO からの情報 超音波センサーデータの表示
JSON でデータ送受信しRMI に比べ低オーバヘッド
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved88
Java SE 8EE 7 だけで実現
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved89
今後 10 年も Java
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved90
Java SE 8 (JSR 337)新機能
bull JSR-308 Annotations on typesbull JSR-310 Date and Time APIbull JSR-335 Lambda expressions
更新機能bull JSR-114 JDBC Rowsetsbull JSR-160 JMX Remote APIbull JSR-199 Java Compiler APIbull JSR-173 Streaming API for XMLbull JSR-221 JDBC 40bull JSR-269 Pluggable Annotation-Processing API
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved91
Language
Core Libraries
Virtual machine
Security
Platform
Internationalisation
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved92
カテゴリ JEP ID 新機能の概要
---- 126 Lambda 式 と 仮想的な拡張メソッド (default method)
---- 138 Autoconf-Based のビルドシステム
---- 160 Lambda-Form Representation for Method Handles
---- 161 コンパクトプロファイル
---- 162 モジュール化への準備
---- 164 AES 暗号化のために CPU 命令の活用
---- 174 Nashorn JavaScript エンジン
---- 176 Mechanical Checking of Caller-Sensitive Methods
---- 179 Document JDK API Support and Stability
vm-- 142 Reduce Cache Contention on Specified Fields
vmgc 122 パーマネント領域の削除
vmgc 173 あまり使用されない GC の組み合わせの禁止
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved93
カテゴリ JEP ID 新機能の概要
vmrt 136 Enhanced Verification Errors
vmrt 147 Reduce Class Metadata Footprint
vmrt 148 Small VM
vmrt 171 Fence Intrinsics
core-- 153 Launch JavaFX Applications
corelang 101 Generalized Target-Type Inference
corelang 104 Annotations on Java Types
corelang 105 DocTree API
corelang 106 Add Javadoc to javaxtools
corelang 117 Remove the Annotation-Processing Tool (apt)
corelang 118 Access to Parameter Names at Runtime
corelang 120 Repeating Annotations
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved94
カテゴリ JEP ID 新機能の概要
corelnag 139 Enhance javac to Improve Build Speed
corelnag 172 DocLint
corelib 103 Parallel Array Sorting
corelib 107 Bulk Data Operations for Collections
corelib 109 Enhance Core Libraries with Lambda
corelib 112 Charset Implementation Improvements
corelib 119 javaxlangmodel Implementation Backed by Core Reflection
corelib 135 Base64 Encoding amp Decoding
corelib 149 Reduce Core-Library Memory Usage
corelib 150 Date amp Time API
corelib 155 Concurrency Updates
corelib 170 JDBC 42
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved95
カテゴリ JEP ID 新機能の概要
corelib 177 Optimize javatextDecimalFormatformat
corelib 178 Statically-Linked JNI Libraries
corelib 180 Handle Frequent HashMap Collisions with Balanced Trees
corei18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data
corei18n 128 BCP 47 Locale Matching
corei18n 133 Unicode 62
corenet 184 HTTP URL Permissions
coresec 113 MS-SFU Kerberos 5 Extensions
coresec 114 TLS Server Name Indication (SNI) Extension
coresec 115 AEAD CipherSuites
coresec 121 Stronger Algorithms for Password-Based Encryption
coresec 123 Configurable Secure Random-Number Generation
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved96
カテゴリ JEP ID 新機能の概要
coresec 124 Enhance the Certificate Revocation-Checking API
coresec 129 NSA Suite B Cryptographic Algorithms
coresec 130 SHA-224 Message Digests
coresec 131 PKCS11 Crypto Provider for 64-bit Windows
coresec 140 Limited doPrivileged
coresec 166 Overhaul JKS-JCEKS-PKCS12 Keystores
webjaxp 185 JAXP 15 Restrict Fetching of External Resources
ご参照 httpopenjdkjavanetprojectsjdk8features
JDK 8 JEP に記載される拡張機能 一覧
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved97
最後に
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved98
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved99
Java Platform Standard Edition 8 ドキュメント
httpdocsoraclecomjavasejp8
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved100
Java リリースノート
httpwwworaclecomtechnetworkjpjavajavaseoverview8train-relnotes-latest-2153846-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved101
JDK 8 の新機能概要
httpwwworaclecomtechnetworkjpjavajavaseoverview8-whats-new-2157071-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved102
JDK 8 の互換性非互換性の情報ガイド
httpwwworaclecomtechnetworkjavajavase8-compatibility-guide-2156366html
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved103
JDK 8 リリース時の既知の問題
httpwwworaclecomtechnetworkjpjavajavase8-known-issues-2157115-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved104
Java サポートロードマップ
httpwwworaclecomtechnetworkjpjavaeol-135779-jahtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved105
Java チュートリアル
httpdocsoraclecomjavasetutorialtutorialLearningPathshtml
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved106
is Back
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください
Copyright copy 2014 Oracle andor its affiliates All rights reserved107Copyright copy 2014 Oracle andor its affiliates All rights reserved107
Java SE 8是非ご活用ください