タグ

Java8に関するnaga_sawaのブックマーク (29)

  • CompletableFutureの使い方の基本形とFutureTaskとの連携例 - seraphyの日記

    Java8から利用可能になったCompluteableFutureとは、他言語におけるDeferredとかPromiseパターンといわれるものと同等のものであり、これにより並列処理を直列的に記述できるようになる。(つまり超便利。) 基的な使い方 もっとも簡単な使い方としては、CompletableFutureが用意している静的コンビニエンスメソッドであるrunAsyncか、supplyAsyncを使う。 たとえば、以下のようなものになる。 1つのタスクの完了後に処理を継続する例 ExecutorService es = Executors.newCachedThreadPool(); ... CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> heavyWork("job1"), es); cf.whenC

    CompletableFutureの使い方の基本形とFutureTaskとの連携例 - seraphyの日記
    naga_sawa
    naga_sawa 2018/03/22
    CompletableFuture を使った非同期処理機構
  • Java8のCompletableFuture調査 - Qiita

    Javaで複雑なスレッド処理 Javaには当初からThreadクラスがあるが、インスタンス生成が重くて微妙だった。 JDK5からはExecutorが導入されて、WorkerThread的なことはやりやすくなったし、Lock系のクラスも増えて便利になった。また、Futureの導入により処理結果を受け取るのも楽になった。 とはいえ、Future.get()を呼ぶと呼び出しThreadがブロックするからそれもまた別Threadでやって、というようになんか質的じゃない処理を書かないといけなかったのも確か。 Java8からはCompletableFutureが導入され、より複雑なThread処理を行うことができるようになったようなので、調査をする。 前提知識 同じくJava8で導入されたFunction, Consumer, Supplierを理解していないとよく分からないと思う。以下に記事書いた

    Java8のCompletableFuture調査 - Qiita
    naga_sawa
    naga_sawa 2018/03/22
    CompletableFuture を使った非同期処理機構
  • CompletableFutureのキャンセル動作 - yohhoyの日記

    Java8で追加されたjava.util.concurrent.CompletableFutureクラスとキャンセル動作について。 CompletableFuture#cancelメソッドは、実行中の非同期処理に割り込み(interrupt)キャンセルしない。 該当CompletableFutureが未完了の場合、CancellationException例外送出で例外完了となる。(完了済みの処理ステージには作用しない) CompletableFutureに継続処理が存在する場合、キャンセル動作は後続の処理ステージ*1にのみ作用する。 メソッドチェイン形式で記述している場合、処理チェイン全体が自動的にキャンセルされる訳では無いことに注意。 // 非同期処理チェイン CompletableFuture<V> future = CompletableFuture. .supplyAsync((

    CompletableFutureのキャンセル動作 - yohhoyの日記
    naga_sawa
    naga_sawa 2017/05/01
    CompletableFuture#cancel は紐付いているタスクにinterruptしない/うまく実装しておかないとスレッド握りっぱなしになるかも
  • java.util.concurrent.CompletableFutureクラス - yohhoyの日記

    Java8で追加された java.util.concurrent.CompletableFuture*1 クラスについてメモ。CompletionStage, Futureの両インタフェースを実装するクラス。 Executorsフレームワーク(Java5以降)およびFork/Joinフレームワーク(Java7以降)の上で、Futureパターン*2により合成可能な非同期/同期処理を実装するためのユーティリティクラス。類似のFutureTaskクラスは単なる同期プリミティブに過ぎないが、CompletableFutureクラスは独立した1つのフレームワークともいえる機能を提供する。 CompletableFuture<T>オブジェクトは、戻り値がT型オブジェクトまたは任意の例外送出の処理結果を表す。*3(Futureインタフェース) 実処理体としてRunnable(T=Void)、またはSu

    java.util.concurrent.CompletableFutureクラス - yohhoyの日記
    naga_sawa
    naga_sawa 2017/05/01
    CompletableFuture のメソッド分類
  • もしもラムダの中で例外が発生したら(後編) - Taste of Tech Topics

    こんにちは。アキバです。 ゴールデンウィークですね! 皆さんいかがお過ごしですか? 今年は間に平日が多めなので、大型連休!というよりは2回連休があるというイメージの方が強いかもしれません。 cero-tの奥さんは11連休だとか さて、前回に続いて、ParallelStreamで動かしているラムダ内で、例外が発生した場合の挙動について調べていきます。 まずは、軽くおさらいします。 以下のようなコードを書きました。 try { List<String> strArray = Arrays.asList("abc", "def", "xxx", "ghi", "jkl", "xxx", "pqr", "stu"); strArray.parallelStream().forEach(s -> { System.out.println("ラムダ開始: id=" + Thread.currentTh

    もしもラムダの中で例外が発生したら(後編) - Taste of Tech Topics
    naga_sawa
    naga_sawa 2016/09/15
    parallelStream するときはラムダ内は例外が出ないような処理に制限するかラムダ内でちゃんと処理を終えるか/例外が起き得る処理は Stream 以外の方法で書くべきっぽい
  • Java 8 新機能つまみぐい - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Java 8 新機能つまみぐい - Qiita
    naga_sawa
    naga_sawa 2016/09/14
    Java8主立った新機能
  • java.util.function以下の関数インターフェース使い方メモ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    java.util.function以下の関数インターフェース使い方メモ - Qiita
    naga_sawa
    naga_sawa 2016/08/27
    関数インタフェースまとめ
  • Stream 中間操作編 : Java好き

    中間操作でなんといっても気をつけなくてはいけないのは、 中間操作メソッドを呼び出しただけでは、 Streamオブジェクトを作っているだけということ。 中間操作メソッドに渡した処理は、 終端操作が呼び出されたときに実行される。 これを忘れてしまうと、 「全然うごかねー」ってことになりハマる。 中間操作の中でも「filter」「map」「peek」が基で 必ず押さえておきたい。 残りは使えると便利といったところ。

    Stream 中間操作編 : Java好き
    naga_sawa
    naga_sawa 2016/08/25
    Stream の中間操作メソッドまとめ
  • (o1, o2) -> o1 - o2 なんて呪文はもうやめて! - Java8でのComparatorの使い方 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    (o1, o2) -> o1 - o2 なんて呪文はもうやめて! - Java8でのComparatorの使い方 - Qiita
    naga_sawa
    naga_sawa 2016/08/24
    Java8以降ではデフォルトで用意されている Comparator が容易に使える
  • Stream APIの特殊なメソッドとメソッド参照/コンストラクター参照

    連載目次 前回の「Stream APIの主なメソッドと処理結果のOptionalクラスの使い方」では、Stream APIの持つ主なメソッドについて見てきました。今回は前回の記事では紹介できなかったStream APIのメソッドと、ラムダ式と関係が深い「メソッド参照」「コンストラクター参照」について見ていきます。 Stream APIには前回の記事で紹介したもの以外にもさまざまなものが用意されています。今回はStream APIの中でも使う際に注意をする必要があるメソッドを紹介します。 またJava 8では、ラムダ式とともにメソッドの呼び出しやコンストラクターの呼び出しを簡易化したメソッド参照やコンストラクター参照の表記法を導入しました。これらはラムダ式と同様に「関数型インターフェース」を引数として持つメソッドで使われる表記法です。 指定した要素を作成してStreamを生成するgenera

    Stream APIの特殊なメソッドとメソッド参照/コンストラクター参照
    naga_sawa
    naga_sawa 2015/11/19
    Java8 Stream の終端処理
  • Stream APIの主なメソッドと処理結果のOptionalクラスの使い方

    連載目次 前回の「ラムダ式で領を発揮する関数型インターフェースとStream APIの基礎知識」では、ラムダ式を使うことで領を発揮する汎用的な関数型インターフェースとStream APIの概要を見てきました。 今回は、前回に引き続きStream APIについて見ていき、主なメソッドとその使い方を学んでいきましょう。 Streamの生成 Stream APIを使うには、Streamのインスタンスを生成しなければいけません。まずは、そのStreamインスタンスを生成する方法を見ていきましょう。 配列やCollectionなどからのStreamの生成 Streamは配列やCollectionなどから作成可能です。まずは配列やCollectionからStreamのインスタンスを生成する主なメソッドを見てみましょう。下記のものが主なメソッドです。 呼び出し元クラス/インターフェース メソッド 概

    Stream APIの主なメソッドと処理結果のOptionalクラスの使い方
    naga_sawa
    naga_sawa 2015/11/19
    Java8 Stream の処理API
  • ラムダ式で本領を発揮する関数型インターフェースとStream APIの基礎知識

    前回の「知っといてムダにならない、Java SE 8の肝となるラムダ式の基文法」では、Javaでのラムダ式の記述方法について見てきました。 今回はラムダ式の導入によってより効果を発揮するJava 8の新機能について見ていきます。今回のJavaのバージョンアップではラムダ式の導入と共に、多くの関数型インターフェースを扱うAPIが追加されています。 今までJavaをやっている人の中には「Java 8の新しい機能を試してみよう」と思っている人も多いことでしょう。しかし、「ラムダ式」という新しい書式に加えてAPIに数多くのクラスやインターフェースやメソッドが追加されていて、その多さに拒否感を持ってしまう人もいるかと思います。 しかし、多くの新機能は幾つかの基盤となるパターンがあり、多くの細かい機能はそれらを拡張したものになっています。今回は、その中で「汎用的に使える関数型インターフェース」「ラム

    ラムダ式で本領を発揮する関数型インターフェースとStream APIの基礎知識
    naga_sawa
    naga_sawa 2015/11/19
    Java8 Stream
  • 知っといてムダにならない、Java SE 8の肝となるラムダ式の基本文法

    ついにJava SE 8、つまりJDK 8が正式リリースとなりました(日時間3月19日、早朝)。連載「Java 8はラムダ式でここまで変わる」では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式や、それに関連するJava 8の新しいAPIについて解説していきますので、正式リリースされたJava SE 8を使いこなせるように、ぜひご愛読ください。 前回の「初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築」ではJavaでのラムダ式の概要と利点、必要性、JDK 8のセットアップ、NetBeans、IntelliJ IDEA、Eclipseのe(fx)clipseプラグインの環境構築について解説しました。実行できる準備ができたところで今回は、ラムダ式の読み書きができるように基的な文法を見ていきましょう。 ラムダ式の基文法の概要

    知っといてムダにならない、Java SE 8の肝となるラムダ式の基本文法
    naga_sawa
    naga_sawa 2015/11/19
    Java8 ラムダ式の書式周り/匿名クラス比で this の扱いが違うのは罠っぽい
  • Java 8はラムダ式でここまで変わる

    連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。最終回は、Stream APIの特殊なメソッド3つと、ラムダ式と関係が深いメソッド参照やコンストラクター参照についてコード例を交えて解説。

    Java 8はラムダ式でここまで変わる
    naga_sawa
    naga_sawa 2015/11/19
    Java8 ラムダ式
  • Java8 Stream APIの基本(7) - 終端操作2(Stream#collect) - エンタープライズギークス (Enterprise Geeks)

    今回はStream#collectの内部構造の概要を紹介する。 以前の記事では、Streamで加工したデータをList等のデータ構造に変換する際にcollect(Collectors.toList())のようなコードを書いた。 しかしStream#collectはStream APIの汎用的な終端操作であるため、Listだけでなく様々なデータ構造への変換が可能である。 可変リダクション操作とは Stream#collect および、今回解説するCollectorのJavadocには、「可変リダクション操作(mutable reduction operation)」という言葉が登場するので、ここで簡単に説明しておく。 「リダクション操作」とは、一連の要素に特定の演算を適用して1つにまとめる操作である。 たとえば、数値のリストの合計値を求める処理は、数値リストに要素同士の加算という演算を適用し

    Java8 Stream APIの基本(7) - 終端操作2(Stream#collect) - エンタープライズギークス (Enterprise Geeks)
    naga_sawa
    naga_sawa 2015/11/04
    Java8 stream API
  • Java8のインタフェース実装から多重継承とMix-inを考える | ギークを目指して

    2014年3月18日、ついにJava8が正式にリリースを迎えた。 折角なので、今後、Java8の新機能に関する記事をいくつかアップしていきたい。 Java8といえばやはりラムダ式だけど、既に色々な方がブログ等々で紹介しているので、今回は、Java8にて導入されたインタフェースのデフォルト実装と多重継承、Mix-inの関係について書いていきたいと思う。 かなり長丁場になりそうだが、最後までお付き合いいただければ幸いである。 では、Java8の世界に飛びだそう! Java8のインタフェース実装とは? Java8では、インタフェースに実装を持てるようになった。 定義の方法は「default」句、または「static」句を利用する2パターンが存在する。 今回の記事では「default」句を利用した場合のメソッドの振る舞いから多重継承とmix-inについて考えていく。 default句を使用したイン

    Java8のインタフェース実装から多重継承とMix-inを考える | ギークを目指して
  • ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API - Taste of Tech Topics

    こんにちは @cero_t です。 今日のテーマは・・・ラピュタ禁止令! バルス! いや違う。ラムダ禁止令、です。 さて、なかなかの滑り出しですが、今日はただのラムダの紹介ではなく、禁止令に主眼を置いて語ります。 このエントリーは、Java Advent Calendar 2013の12/16分の投稿です。 http://www.adventar.org/calendars/145 前日は @sugarlife さんの JDK 8 新機能ダイジェスト (JDK 8 Features) です。 翌日は @setoazusa さんです。 ラムダ禁止令はあり得るのか? 勉強会やその懇親会などで、たびたび「ラムダ禁止令が出るのではないか」が話題に上ることがあります。 「そりゃ禁止する組織もあるでしょうね」というのがお決まりの答えなのですが、ただそれに従うだけでは面白くありませんし、要素技術の発展も

    ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API - Taste of Tech Topics
    naga_sawa
    naga_sawa 2015/06/26
    自分の観測範囲では危険度Bぐらいまでなら大体把握してもらえそう/2016年に読み返してやっぱり A は危険だわ
  • Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena

    Java8のlambda構文の話を書くと、旧来の書き方でいいというコメントがつくのですが、それでも便利になったMapの恩恵を受けることは多いんじゃないかと思います。 ※ 2018/5/31 Java9からはメモ化再帰には使えなくなっています ※ 2019/2/15 なんか問題ない? Mapには、lambda式を使ったメソッドが多く追加されていますが、たとえばgetOrDefaultメソッドのようなlambda式を使わないメソッドも追加されていて、これも便利です。 そして、このようなlambda式を使わないメソッドも、間接的にはlambda構文サポートでの言語拡張のおかげです。 Mapはインタフェースなので、Java7までの構文でメソッドを追加しようとすると、Mapを実装しているすべてのクラスに新しいメソッドの実装を追加する必要がありました。そしてそれは現実的に不可能なので、今までMapなど

    Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena
    naga_sawa
    naga_sawa 2014/12/26
    Java8/ラムダ式とあわせてこういう使い方できるのかと
  • もしもラムダの中で例外が発生したら(前編) - Taste of Tech Topics

    ある日、 id:cero-t がJJUGの重鎮たちと話している中で、とある宿題をもらいましたとさ。 「Java8のラムダの中で例外が発生したら、どうなるんだろう?」 こんにちは、アキバです。 もう皆さんはJava8を使ってみましたか? とりあえずインストールしてみた人! ・・はーい (おまえか という冗談はさておき、 今回は、id:cero-t に代わって私が冒頭のお題を調べてみました。 1. SerialStreamで動かしたラムダで例外が発生したら まずは、小手調べにシングルスレッドの場合を見てみましょう。 検査例外が発生するようなコードをラムダに書いてみると、コンパイルエラーになります。 こんなコードです。 try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(W_FILENAME))) { // writer.

    もしもラムダの中で例外が発生したら(前編) - Taste of Tech Topics
    naga_sawa
    naga_sawa 2014/04/17
    非同期系の例外は扱いが難しいので
  • あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(後編) - Taste of Tech Topics

    こんにちは。 アキバです。 日3/18、ついに、Java8が正式リリースされますね! もうダウンロードされましたか?ってまだですかね?私はまだです(だって公開前にエントリ書いてるんだもんね) 2014/03/19追記:Oracleのページが更新されました!→こちら さて、前回に続いて、Java8で追加された地味で便利なAPIを紹介していきます。 今回は、みんな大好きMapとConcurrent、あとちょびっとComparatorです。 3. Map操作編 (1) Map#getOrDefault() これまでは、Mapから値を取得してnullだったらデフォルト値を使用する、みたいなコードを以下のように書いていたと思います。 Map<String, String> map; // 何らかのMap String value = map.get("key"); if (value == nul

    あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(後編) - Taste of Tech Topics
    naga_sawa
    naga_sawa 2014/03/18
    Java8 で追加の便利API