タグ

Java SE 8に関するatm_09_tdのブックマーク (43)

  • nullチェックの煩雑さを解決、Java SE 8で導入されたjava.util.Optionalクラス

    変数に値が代入されているかどうかを調べるためのイディオムとしてnullチェックがあります。 nullチェックがよく使用されるのが、メソッドの返り値や引数です。例えば、条件に合致した要素を探すsearchメソッドを考えてみましょう。ここでは、searchメソッドの返り値の型がResultクラスだとします(リスト1)。 リスト1●nullチェックの例 Result result = search(t -> t.startsWith("a")); if (result == null) { // 結果がなかった場合の処理 } else { // 結果に応じた通常の処理 } もし、条件に合致する要素がなければsearchメソッドはnullを返します。しかし、nullをそのまま扱ってしまうと、NullPointerException例外が発生してしまいます。 そこで、それを防ぐためにif文で変数の値

  • 詳解 Java SE 8 第24回 Date and Time APIの日付/時刻クラス

    前回は、Date and Time APIのベースとなる、日付と時刻の表記に関する国際規格である「ISO 8601」について紹介しました。今回からは、Date and Time APIを解説していきます。 まず、Date and Time APIの概要を説明します。その後、Date and Time APIで、最も使用頻度が高い日付/時刻を表すクラスを紹介していきます。 Date and Time APIの概要 Date and Time APIは、以下のような特徴を持ったAPIです。 ISO 8601がベース 多様な時間表現を表すクラス群 イミュタブル(immutable) 多様な日時演算 和暦、ヒジュラ暦などのサポート 高い拡張性 既存のjava.util.Dateクラス、java.util.Calendarクラスは日時を表せます。しかし、日付だけで十分な場合でも、日付だけを表すクラス

    詳解 Java SE 8 第24回 Date and Time APIの日付/時刻クラス
  • 詳解 Java SE 8 第23回 Date and Time APIとISO 8601

    Java SE 8でProject Lambdaの次に注目される機能といえば、「Date and Time API」でしょう。 今まで日時に関するAPIとしては、java.util.Dateクラスとjava.util.Calendarクラスを中心としたクラス群が提供されてきました。ただ、読者のみなさんも経験があると思いますが、DateクラスとCalendarクラスはいろいろと使いづらい点が多くあります。 時間間隔を表すことができないことや、日時に関する演算の種類が少ないなど、機能的に足りていない部分も多くあります。 これに対し、Date/Calendarクラスを置き換えるAPIが、Java SE 8で導入されたDate and Time APIです。 Date and Time APIはJCPのJSR 310として仕様策定が行われました。スペックリードは3人いますが、中心になっているのはS

    詳解 Java SE 8 第23回 Date and Time APIとISO 8601
  • 詳解 Java SE 8 第21回 Concurrency Utilitiesのアップデート その3

    今回も前回に引き続き、Concurrency UtilitiesのCompletableFutureクラスを紹介していきます。 CompletableFutureクラスはFutureインタフェースを実装したクラスで、非同期に処理する複数のタスクを組み合わせて実行することができます。前回、非同期処理するタスクを組み合わせる手法について紹介しました。 今回は、非同期処理の制御に関する機能について紹介します。また、これまでは非同期に処理するタスクが正常に完了していた場合のみを取り上げていましたが、例外が発生した場合についても取り上げます。 非同期処理の制御 CompletedFutureクラスが実装しているFutureインタフェースは、結果の取得や処理のキャンセルなどの機能を定義しています。CompletedFutureクラスはこれらの機能に加え、独自の機能を提供しています。表1に主なメソッドを

    詳解 Java SE 8 第21回 Concurrency Utilitiesのアップデート その3
  • 詳解 Java SE 8 第20回 Concurrency Utilitiesのアップデート その2

    前回から、Java SE 8で導入されたConcurrency UtilitiesのCompletableFutureクラスの紹介を行っています。今回はその続きです。 簡単におさらいしておくと、CompletableFutureクラスは、非同期に処理する複数のタスクを柔軟に組み合わせて実行することができるクラスです。 メソッドチェインでタスクを連ねていきますが、それぞれをステージと呼びます。あるステージが完了したら、次のステージというように処理を進めていきます。 前回は基的な使い方と、CompletableFutureオブジェクトの生成について紹介しました。今回は、非同期処理の合成について紹介していきます。 CompletableFutureのタスク CompletableFutureクラスではタスクを表1に示す3種類のインタフェースで表します。

  • 詳解 Java SE 8 第19回 Concurrency Utilitiesのアップデート その1

    年も明けた今回は、Concurrency Utilitiesのアップデートについて紹介していきます。Concurrency Utilitiesは、前回までのProject Lambdaとの関係も深く、Project Lambda関連の変更も多くあります。 Project Lambda関連以外の主なアップデートには、次のようなものがあります。 CompletableFuture CountedCompleter DoubleAccumulator/DoubleAdder LongAccumulator/LongAdder StampedLock ConcurrentHashMapの変更 CompletableFutureクラスはJava SE 8で新たに導入されたjava.util.concurrent.Futureインタフェースの実装クラスです。このクラスに関しては、この後詳しく説明します

    詳解 Java SE 8 第19回 Concurrency Utilitiesのアップデート その1
  • 詳解 Java SE 8 第18回 Project LambdaによるAPIの変更

    今回がProject Lambdaの最終回です。今回はストリームAPIではなく、Project Lambdaによる他のAPIの変更について紹介していきます。 Project LambdaによるAPIの変更はやはりコレクションに多くあります。ここではArraysクラス、Collectionインタフェース、Mapインタフェースの変更を紹介します。これらのインタフェースに追加されたメソッドはすべてdefault実装で実現されています。 また、Logging APIの変更についても紹介します。 Arrays java.util.Arraysクラスは配列に関するユーティリティクラスです。配列のコピーなどさまざまな機能がそろっていますが、Java SE 8でさらに機能が加わりました。 Java SE 8で加わった機能には、メソッド名がparallelで始まるものがあります。parallelで始まるメソ

  • ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識

    ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識:ここが大変だよJava 8 Date-Time API(1)(1/5 ページ) Date-Time APIの概要や、Java 8より前の旧日時APIから何が改善されたのかに加え、新しく追加されたさまざまなクラスについて解説します。 2014年3月にリリースされたJava 8では、それより前まで日時を扱っていた「java.util.Date」「java.util.Calendar」などとは異なる、新しい日時を扱うAPIが追加されました。この連載ではJava 8より追加されたDate-Time APIについて、一般的な業務システムを構築する際に必要な情報を簡単に見ていきます。 今回は、Java 8より前の旧日時APIから何が改善されたのか、Date-Time APIからどのようなクラスが用意されているのかなど全体的

    ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識
  • 詳解 Java SE 8 第17回 パラレルストリームのしくみ

    JavaOneレポートが挟まってしまいましたが、再び詳説Java SE 8に戻りましょう。 今月は第16回の続きで、もう1度パラレルストリームを取りあげます。まず、第16回で取りあげなかった、reduceメソッドについて説明し、その後パラレル処理のしくみについて解説します。 reduce 連載の第6回でreduceメソッドには3種類のオーバーロードが存在することを示しました。第6回ではそのうち2種類を説明しましたが、もう1つのオーバーロードが残っています。 第6回で説明したreduceメソッドは、第1引数の初回値とストリームの要素の型が同一でなくてはなりませんでした。もう1つのreduceメソッドは初回値とストリームの要素の型が異なっているものです。 このreduceメソッドのシグネチャはリスト1のようになっています。 リスト1 reduceメソッドのシグネチャ U reduce(U i

    詳解 Java SE 8 第17回 パラレルストリームのしくみ
  • Java SE 8のストリームAPIの正しい使い方──ラムダ式とともに導入された新APIで、並列処理の実装はどう変わるのか? - builder by ZDNet Japan

    Java SE 8では、ラムダ式の導入に伴い、並列処理の実装を容易にする新APIとして「ストリームAPI」が追加された。その効果的な使い方を、前回の記事に続いて米国オラクルのスチュアート・マークス氏が解説する。 >> 前回の記事はこちら 前回は、米国オラクルでJava SEの仕様策定をリードするスチュアート・マークス氏によるラムダ式の基礎解説をお届けした。今回はその続編として、Java SE 8でラムダ式のサポートに伴って導入された新機能「ストリームAPI」に関するマークス氏の解説をお届けする。 ※記事は、2014年5月に東京で開催された「Java Day Tokyo 2014」におけるスチュアート・マークス氏のセッション「Lambda式とストリームAPI、並列処理の詳細」を基に構成しています。 パイプラインや並列処理をスマートに実装できるJava SE 8の新機能「ストリームAPI

  • ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2

    Spring Securityを触ったことがあるけど、裏で何が起こっているか分からず、モヤモヤしてる方にお勧めの資料です。 Spring Securityのキーとなる「Security Filter Chain」と「Security Context」についてじっくり説明しています。 資料を読んでいただければ、Spring Securityのデバッグやカスタマイズがし易くなるはずです。 ※読者の想定としてSpring Securityに触ったことがある方を想定しています。全くの初心者の方は、簡単な認証・認可を事前に動かしてみることをお勧めします。

    ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
  • 詳解 Java SE 8 第16回 パラレルストリーム

    今まで扱ってきたストリームはすべてシーケンシャルに処理を行うストリームでした。 しかし、連載の第2回で記述したように、Project Lambdaの導入理由はパラレル処理にあります。そこで、今月は満を持してパラレルストリームについて紹介していきます。 パラレル処理といっても、パラレルストリームの場合、いくつかの約束を守っていればそれほど難しいことはありません。 早速、試してみましょう。 パラレルストリームの生成 パラレルストリームといっても、パラレルストリーム用のインタフェースがあるわけではありません。今まで通り、StreamインタフェースもしくはIntStreamインタフェースなどを使用します。 異なるのは、ストリームを生成するためのメソッドです。 コレクションからストリームを生成する場合、シーケンシャルなストリームであればstreamメソッドを使用してきました。パラレルストリームの場

    詳解 Java SE 8 第16回 パラレルストリーム
  • 詳解 Java SE 8 第14回 Stream APIのまとめ その2

    今回も前回同様、従来の書き方からストリームに変換していく過程を紹介していきます。 前回は主にfilterメソッド、mapメソッド、forEachメソッド、collectメソッドの4種類のメソッドを使用しましたが、今回はそれに加えflatMapメソッドを使っていきます。 また、collectメソッドで、標準では提供されていない機能を独自のCollectorインタフェースの実装クラスを作成してみます。 今回も、前回同様、顧客を表すCustomerクラスを使用しましょう。Customerクラスは名前、取引額、グレードを保持するクラスです。それぞれgetNameメソッド、getTransactionValueメソッド、getGradeメソッドで取得できます。 今回はCustomerクラスに加えて、営業担当者を表すSalesPersonクラスをします。SalesPersonクラスは名前、担当エリア、

    詳解 Java SE 8 第14回 Stream APIのまとめ その2
  • Java8 で java.lang.Object#hashCode() の生成アルゴリズムが変更されていました。 - 地平線に行く

    java.lang.Object#hashCode()の性質という記事で書いたのですが、Java の Object#hashCode() の値はただの乱数となっています。 この乱数のアルゴリズムが、Java SE 8 で「線形合同法」から「XORシフト方式」に変更になっていました。 といっても、変更されたのはたった1文字。 VMオプションのデフォルト設定が -XX:hashCode=0 から -XX:hashCode=5 に変わっただけでした。 hotspot-rt Udiff hotspot/src/share/vm/runtime/globals.hpp どういうこと? もともと、Java の以前の実装*1 *2から、Object#hashCode() のアルゴリズムはVMオプション -XX:hashCode=? で選べるようになっていました。 ですが、デフォルトは長いこと 0(=線形

    Java8 で java.lang.Object#hashCode() の生成アルゴリズムが変更されていました。 - 地平線に行く
  • JDK8からあるちょっと嬉しいGCログオプション - n-agetsumaの日記

    JDK8およびJDK8u20では、GCログに関連する2つの便利な機能が追加されている。いずれの機能も2014/8現在最新のJDK7 update 67 には含まれていないが、JDK7u80にてバックポートされる予定。 GCログにpidと日付を含める (JDK8より) JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/wildfly/gc_%p_%t.log" => 実際のファイル名例 : gc_pid31455_2014-08-31_14-20-16.log.0GCログのフォーマットに%pを入れるとpid形式のプロセスIDが付与される。また%tを付与すると"_2014-08-31_14-20-16"のようにGCログファイルを作成した日付時分秒が追加される。かつてGCログはJavaを再起動すると同じファイルが上書きされて消えてしまうため、出力先を-Xloggc:g

    JDK8からあるちょっと嬉しいGCログオプション - n-agetsumaの日記
  • 詳解 Java SE 8 第12回 Stream APIその7

    前回はストリームから離れて、java.util.Optionalクラスを紹介しました。Optionalクラスを使用すると、今までnullチェックを書いていた箇所を書き換えることが可能になります。 今回は、再びストリームに戻って、ストリームのメソッドのうちOptionalクラスを使用しているものを紹介していきます。 ストリームのメソッドでOptionalクラスを使用しているのは次の5つのメソッドです。 findFirst findAny max min reduce いずれも終端処理で、戻り値の型がOptionalクラスとなっています。 以下、順々に紹介していきます。 findFirst/findAny findFirstメソッドもfindAnyメソッドもストリームの要素を返すメソッドです。いずれも、引数はありません。 findFirstメソッドはストリームの先頭の要素を返します。 たとえば

    詳解 Java SE 8 第12回 Stream APIその7
  • 詳解 Java SE 8 第11回 nullチェックとOptional

    前回までの解説でまだ紹介していないStreamインタフェースのメソッドは、いずれも戻り値の型がOptionalクラスという共通点があります。 Optionalクラスは、Java SE 8で導入された新しい概念を表すクラスです。そこで、今回はストリームのメソッドを紹介する前に、このOptionalクラスについて紹介します。 Optionalクラス Javaでコードを書いていると、どうしても避けて通れないのがnullチェックです。 たとえば、リスト1のようにメソッドの戻り値のnullチェックを行うなど、頻繁に書かなくてはならないですし、目にすることも少なくありません。 リスト1 典型的なnullチェック Bar bar = foo(); if (bar != null) { // 正常な場合の処理 } else { // nullの場合の処理 } もちろん、nullチェックは防御的プログラミン

    詳解 Java SE 8 第11回 nullチェックとOptional
  • 詳解 Java SE 8 第10回 Stream API その6

    前回は四つの中間操作について紹介を行いました。今回は終端操作をメインに今まで紹介してこなかったメソッドについて紹介します。今回紹介するメソッドを以下に示します。 終端操作 count allMatch/anyMatch/noneMatch 中間操作 peek その他の操作 concat プリミティブ型に対応するストリームのメソッド boxed ストリームの変換メソッド countメソッドはストリームの要素数をカウントするためのメソッドになります。Matchで終わる三つのメソッドはいずれも条件に合致した要素があるかどうかを調べるためのメソッドになります。 allMatchメソッドは全ての要素が条件に合致しているかどうか、anyMatchメソッドは一つでも条件に合致しているかどうかを調べます。最後のnoneMatchメソッドは条件に合致している要素がないことを調べます。 中間操作のpeekメソ

    詳解 Java SE 8 第10回 Stream API その6
  • Java SE 8で変わるJava EE開発──ラムダ式と並列処理用ライブラリで、エンタープライズ・アプリケーションの応答性能を高める - builder by ZDNet Japan

    Java SE 8以降の開発ではfor文の利用頻度が減る。ラムダ式とStream APIが中心に Java EE 7から、サーバ・サイドにおいてもスレッド(並列処理)の実装が可能になりました。具体的には、「Concurrency Utilities for EE 7」により、スレッドをアプリケーション・サーバの管理下で動かせるようになっています。また、Java SE 8では、並列処理の実装を支援するクラスとしてCompletableFutureが追加されました。これらのAPIを組み合わせることにより並列処理の実装がどう楽になるのかを、次の例題で考えてみます。 この処理をJava SE環境で実装するとしたら、一般的には次のようになるでしょう。 手順(1):固定長のスレッド・プールを持つExecutorServiceオブジェクトを生成する 手順(2):ExecutorCompletionSer

    Java SE 8で変わるJava EE開発──ラムダ式と並列処理用ライブラリで、エンタープライズ・アプリケーションの応答性能を高める - builder by ZDNet Japan
  • Efficient data transfer through zero copy

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Efficient data transfer through zero copy