倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Java8

「日曜日から土曜日まですっぽりとハマってる月は今月が実に823年ぶり 」は本当かどうか Java 日時 API に問うてみた

2月1日にこんなツイートがありました:【速報】このようにちょうど日曜日から土曜日まですっぽりとハマってる月は今月が実に823年ぶり pic.twitter.com/TdKTgSHEbP— 処嬢てぃてぃ (@tyTX8) 2015, 2月 1 で、即刻「デマだ!」というリプとかもあって「やられ…

どんとこいタイプ・アノテーション! IntelliJ IDE 独自のタイプ・アノテーション

最近、Java8 で導入されたタイプ・アノテーションを使う方法をあれこれ試してるんですが、コンパイラに機能を追加するだけあって、設定がちょっと面倒なことが多いですね。 タイプ・アノテーションを具体的に使う際によく挙げられている例に、変数に代入され…

どんとこいタイプ・アノテーション! Checker Framework 導入あの手この手 ~without IDE 編~

前回の記事『ラムダ式やストリーム API や新しい日時 API だけじゃない! Java8 のタイプ・アノテーションあの手この手』で、Java8 で導入されたタイプ・アノテーションがどういったものか紹介しました。 その記事では同一要素に重複して同じアノテーション…

ラムダ式やストリーム API や新しい日時 API だけじゃない! Java8 のタイプ・アノテーションあの手この手

Java8 ではラムダ式やストリーム API に注目が集まってますが、何気にアノテーションに関しても機能拡張がされているようなので簡単な変更点や使い方を今夜試してみました。 ElementType の追加 TYPE_PARAMETER TYPE_USE 定義済みアノテーション @Repeatable…

GDK に Java8 で導入された日時 API の拡張が追加されてたので試してみた

Java8 の目玉機能はラムダ式ですが、その次によく取り上げられるのが新しい日時 API である Date and Time API(JSR-310) でしょう。 ただ、この API はナカナカに取っつきにくいという非難の声が。 まぁ、日時の扱い自体が面倒なので仕方がないという擁護の…

Java8 のリリースに便乗して集約プロパティってのを考えてみた

いやー、やっと Java8 が正式リリースになりましたね。 せっかくなので拙者もそれに関連しそうな記事を書こうかと。 ただし、あんまり直接関係するわけではないですが。Java には実質的に仕様と言ってもいいような「プロパティ」というものがありますね。 こ…

Stream インターフェースの親である BaseStream がちゃんとある

以前の記事『Stream インターフェースの親として BaseStream というのがあるようで・・・』で java.util.stream.Stream インターフェースの親タイプとして BaseStream というのがあるようだが公開されてないか削除された、ということを書きましたが、java8-e…

蒐集してやんよ java.util.stream.Collectors クラス (6) - 独自コレクタを作る必要はない!? -

Java の Collectors クラスに定義されているメソッドを見ていくシリーズ(目次)。 前回、簡単な独自コレクタを作ってみましたが、作ったコレクタをあちこちで使い回したりしないなら、ラムダ式と Stream インターフェースに定義されているメソッドで事足り…

蒐集してやんよ java.util.stream.Collectors クラス (5) - 独自コレクタを作ってみよう! -

Java の Collectors クラスに定義されているメソッドを見ていくシリーズ(目次)。 前回 parallel ストリームと concurrent コレクタに関してあれこれ試したワリにはにいまいちしっくり来てない状態なのですが、今回は独自コレクタを作ってみます。あまりキ…

蒐集してやんよ java.util.stream.Collectors クラス (4) - parallel ストリーム と concurrent コレクタ -

Java の Collectors クラスに定義されているメソッドを見ていくシリーズ(目次)。 Stream や Collector に関する記事をそこそこ書いてきて今さらいうのもアレですが、parallel ストリームと concurrent コレクタに関してちょっと(というか根本的に?)勘違…

蒐集してやんよ java.util.stream.Collectors クラス (3) - 内蔵コレクタの特性 -

Java の Collectors クラスに定義されているメソッドを見ていくシリーズ(目次)。 前回までで java.util.stream.Collectors クラスで取得できる Collector オブジェクトの使い方を見ました。 そこでは基本的な使い方を見ていたので Collector インターフェ…

蒐集してやんよ java.util.stream.Collectors クラス (2) - Map を返す Collector -

Java の Collectors クラスに定義されているメソッドを見ていくシリーズ(目次)。 前回に引き続き、今回は Map を返す Collector を見ていきます。 前回にも増して引数の型パラメータを見てるとクラクラするぅ。 まぁ、前回同様、返り値の Collector の第2…

Java 8 のメソッド参照について

ちょっと頭痛がするので「こなし」記事。演算子の参照 プリミティブ型の演算子をメソッド参照みたく取得することはデキナイ? IntBinaryOperator plus = (i, j) -> i + j; はもちろん OK だけど IntBinaryOperator plus = int::+; みたいな風には書けないの…

蒐集してやんよ java.util.stream.Collectors クラス (1) - Map 以外を返す Collector -

今回から何回かに分けて java.util.stream パッケージに定義されている Collectors クラスに定義されているメソッドを見ていきます。目次 Map 以外を返す Collector Map を返す Collector 内蔵コレクタの特性 parallel ストリーム と concurrent コレクタ 独…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (8) - プリミティブ型ストリーム -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 前回までで Stream インターフェースに定義されているメソッドは大体見たので、今回はプリミティブ型のストリーム(以下、プリミティブ型ストリーム)を見ていきます…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (7) - static メソッド -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回は Stream インターフェースに定義されている static メソッドを見ていきます。 というか、Java 8 からインターフェースに static メソッドが定義できるようにな…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (6) - stateful intermediate operators -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回は Stream インターフェースに定義されている stateful intermediate operator に対応するメソッドを見ていきます。 stateful intermediate oprerator は「状態保…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (5) - intermediate operators part 2 -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回は前回に引き続き intermediate operator (中間演算子)を見ていきます。 今回扱うのはストリームの要素はそのままで、その種類を変更する中間演算子です。 スト…

Stream インターフェースの親として BaseStream というのがあるようで・・・

Java 8 ea-b90 の話ですが、java.util.stream.Stream インターフェースのスーパーインターフェースとして、java.util.stream.BaseStream というインターフェースがあるようです。 java.util.stream の package private なインターフェースなので直接参照する…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (4) - intermediate operators part 1 -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回からは java.util.stream.Stream インターフェースに定義されている intermediate operators を見ていきます。 「intermediate operator」は訳すと「中間演算子」…

ラムダ式で assert を使うときはブロックにしないといけない?

java.util.function.Consumer インターフェースは引数を1つ持ち、返り値のない (void) 抽象メソッド accept() を持ちます。 例えば以下のようにしてラムダ式を代入することができます: Consumer<String> cons1 = s -> System.out.println(s); さて、ここでラムダ式</string>…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (3) - short-circuiting terminal operators -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回は Stream インターフェースに定義されている short-circuiting terminal operator に分類されるメソッドを見ていきます。 terminal operator は前回まで扱ってい…

Stream#collect() の型推論は correct ?

最近 Java 8 Project Lambda をちょっとイジってるんですが、そこでコンパイラに怒られた話(Java 8 ea-b90)。 本質的には Java 8 がどうこうというより Generics の話かと思いますが。以前の記事で java.util.stream.Stream インターフェースに定義されて…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (2) - terminal operators part 2 -

Java の Stream インターフェースに定義されているメソッドを見ていくシリーズ(目次)。 今回は java.util.stream.Stream インターフェースに定義されている terminal operator (終端演算子) の残りを見ていきます。 どれも Stream の要素を集めた「コン…

小川のせせらぎもやがてはうねる奔流に Stream インターフェース (1) - terminal operators part 1 -

OpenJDK にて JDK 8 の Feature Complete がリリースされたので、暇を見つけて Java 8 の新機能をあれこれイジっていこうかなと。 使用する JDK のバージョンは 8-ea-b90 です。ってことで、まずは java.util.stream.Stream インターフェースに定義されてい…

祝 Java8 Project Lambda リリース!につき、ラムダ式コトハジメ

まだまだ夜は寒い季節ですが、新年度とともに Java の世界にも一足早く新しい風が吹いてきました。 Java5 でジェネリクスが導入されたときも結構インパクトがありましたが、Java8 でのラムダ式はそれ以上のインパクトがあり、プログラミングのパラダイム・シ…

java.util.function パッケージ 【追記・修正あり】

拙者、あんまり正式リリースされてない API って扱わない保守的な人間なんですが、ふと Java8 で導入されるラムダ式ってのがどんな感じになるのか気になったのでドキュメントを探してみました。 ラムダ式に対応したドキュメントや JavaDoc は普通の「JDK〓 8…