読者です 読者をやめる 読者になる 読者になる

倭マン's BLOG

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

Java の正規表現 API を試す

この前、Groovy の GDK でグループを含む正規表現を試してみました。waman.hatenablog.com 今回は根本に還って、Java の正規表現 API (java.util.regex) の使い方をザッと試してみます。 試した内容は Pattern, Matcher クラスに定義されているメソッドの基…

Groovy でグループを使った正規表現マッチを試す

なんとなく今まで正規表現を回避してたんだけど、定型文字列を String のメソッドだけで解析するの面倒すぎるので、Groovy パワーであれこれ試してみました。 Groovy 使うと、グループを使った正規表現でマッチしたグループの内容を List の要素アクセスのよ…

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.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」は訳すと「中間演算子」…

小川のせせらぎもやがてはうねる奔流に 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 インターフェースに定義されてい…

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

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

死刑執行中 ExecutorService 終了中

前回は ExecutorService を使ったタスクの依頼・実行方法を見ました。 今回は ExecutorService のシャットダウン・終了方法を見ていきます。 ExecutorService を使うプログラムでは必ずシャットダウンを行う必要があるので忘れずに。記事内容 ExecutorServic…

死刑執行中 ExecutorService 実行中

最近『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』で Java の並行処理プログラミングを勉強中なんですが、ExecutorService の使い方あたりで完全に消化不良に陥ってしまったので、知識の整理を敢行。 今回は ExecutorService を使っ…

Groovy で Guarded Suspension パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Guarded Suspension パターン。 Guarded Wait, Spin Lock などとも呼ばれるそうです。このパターンは java.util…

Fork/Join で並列和

前回 Java 7 を使う環境設定を行ったので、ついでにちょっと Java 7 をいじってみます*1。 今回見ていくのは java.util.concurrent パッケージに追加された Fork/Join フレームワークです。 Fork/Join は大量の計算を小さい部分に分けてマルチスレッドで計算…

Java のロギング API ちょっと不思議

以前から Java のロギング API、java.util.logging で不思議に思ってた挙動。確認 普通に使う分にはこんな感じにします(コードは Groovy): import java.util.logging.* def log = Logger.getLogger('logging') log.warning('warning') log.info('info') l…

いまさら!? Class クラス (7) : 特定のクラスに固有のメソッド

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 今回は Class クラスに定義されているメソッドのうち、特定の型に特有のメソッドを見ていきます。 特定の型に特有のメソッドとは、例えば「配列に対して要素の型を返すメソッド」…

いまさら!? Class クラス (8) : リソース、セキュリティ

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 今回でとりあえず Class クラスのメソッドはコンプリート!(Java 6) 最後に残ってるのはよくわからんのバッカリなので流します。クラスローダ ClassLoaderまずはクラスのクラスロ…

いまさら!? Class クラス (6) : メンバへのアクセス

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 今回はメンバへのアクセスを行うメソッド。 ここで、メンバとして扱うのは フィールド コンストラクタ メソッド 内部クラス の4つです。メンバへのアクセス一般各メンバを見てい…

いまさら!? Class クラス (5) : クラス階層とインスタンス

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 今回はクラス階層とインスタンスに関連するメソッドを見ていきます。クラス階層 Class Hierarchyまずはクラス階層に関連するメソッド。 これらは返り値もしくは引数に Class オブ…

いまさら!? Class クラス (4) : クラス宣言

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 今回は Class クラスに定義されているメソッドのうち、クラスの宣言に関するメソッドを見ていきます。クラス宣言に関するメソッドクラス宣言に関するメソッド*1は、ここでは以下…

いまさら!? Class クラス (3) : 文字列に関するメソッド

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 さて、今回から本格的に Class クラスに定義されているメソッドを見ていきます。 今回は文字列に関するメソッド。 文字列からクラスを取得するメソッドは前回扱ったので(Class.f…

いまさら!? Class クラス (2) : Class オブジェクトの取得方法

Java の Class クラスに定義されているメソッドを見ていくシリーズ(目次)。 Class オブジェクトに定義されているメソッドを使うためには、まず Class オブジェクトを何らかの方法で取得する必要があります。 ということで、今回は Class オブジェクトの取…

いまさら!? Class クラス (1) : Class が表す型の種類

最近、Class クラスに定義されているメソッドがイマイチ把握できてないなぁと実感することがしばしばあったので、ちょっとここいらで復習を敢行。 すべてのメソッドを網羅できるかどうかは不明ですが、なるべく多くのメソッドを(簡単にでも)扱えればと思っ…

LIFO キューとして振る舞う Queue オブジェクト

以前の記事で、LIFO キューとして振る舞う Queue オブジェクトを考えました。 が、Java SE 6 で java.util.Collections クラスに追加されたメソッド asLifoQueue(Deque) を使えば、あれこれ考える必要はなかったようですm(_ _)m(一覧) import java.util.Co…

Java と XML と空白と (3) : String#trim() メソッド

前回、Java での「whitespace」のややこしい扱いを見ましたが、哀しいかな、他にも「whitespace」のややこしい扱いがあります。 それは String#trim() です。String#trim() の JavaDoc をみると、 Returns a copy of the string, with leading and trailing …

Java と XML と空白と (2) : 正規表現

前回、java.lang.Character クラスの static メソッドを用いて、Java での空白文字を見ました。 このとき Character#isSpaceChar() Character#isWhitespace() という2つのメソッドを使って空白文字かどうかを判定していました。哀しいかな Java には他の空白…

Java と XML と空白と (1) : Java と XML の空白文字

Java での空白文字 Java で空白とみなされる文字は?と聞かれると、意外とよく分からない。 Character クラスの static メソッドに isSpaceChar() と isWhitespace() とが定義されているけど、JavaDoc を読んでも全然分からない。ということで、実際に Chara…

@Override アノテーション

『Effective Java 第2版 (The Java Series)』を読むまで知らなかったのですが、Java SE 5 から Java SE 6 に移行する際に @Override アノテーション*1の使用方法が変更になっていたそうで。一言で言えば、「インターフェースに宣言されているメソッドをオー…

Java SE 6 のコレクション・フレームワークのメソッド (6) : Map, SortedMap, NavigableMap

前回までに引き続き、今回からは Map インターフェースとそのサブインターフェースを(一覧)。メソッドは独断と偏見で幾つかにカテゴリー分けしてます: エントリーなどの取得:get() や keySet() など エントリーの追加:put() など エントリーの削除:rem…

Java SE 6 のコレクション・フレームワークのメソッド (7) : ConcurrentMap, ConcurrentNavigableMap

あまり使ったことないので、メソッドの宣言だけ載せておきます(一覧)。メソッドは独断と偏見で幾つかにカテゴリー分けしてます: エントリーなどの取得:get() や keySet() など エントリーの追加:put() など エントリーの削除:remove() など その他注意…

Java SE 6 のコレクション・フレームワークのメソッド (5) : BlockingQueue, BlockingDeque

今回は BlockingQueue と BlockingDeque の2つ(一覧)。メソッドは独断と偏見で幾つかにカテゴリー分けしてます: 集合としてのメソッド:size() や iterator() など 要素の挿入:add(), offer() など 要素の削除:remove(), poll() など 要素の検査:eleme…

Java SE 6 コレクション・フレームワークのメソッド (4) : LIFO Queue を考える

前回、「Queue インターフェースは FIFO キューだけでなく、LIFO キューとしても使えるけど、実装がない」と書きました。 今回は LIFO キューとして使える Queue の実装を考えてみましょう(一覧)。 クラス名は LIFOQueue とします。一から作るのは大変ので…

Java SE 6 コレクション・フレームワークのメソッド (3) : Queue, Deque

今回は Queue と Deque の2つ(一覧)。メソッドは独断と偏見で幾つかにカテゴリー分けしてます: 集合としてのメソッド:size() や iterator() など 要素の挿入:add(), offer() など 要素の削除:remove(), poll() など 要素の検査:element(), peek() な…

Java SE 6 コレクション・フレームワークのメソッド (2) : Set, SortedSet, NavigableSet

今回は Set, SortedSet, NavigableSet の3つ(一覧)。 メソッドは独断と偏見で幾つかにカテゴリー分けしてます: 要素の取得:iterator() や getter メソッドなど 要素の追加:add() や addAll() など 要素の削除:remove() や clear() など 要素の削除&取…

Java SE 6 コレクション・フレームワークのメソッド (1) : Collection, List

以前に Java SE 6 のコレクション・フレームワークに定義されているインターフェース群の型階層を簡単に見ました。 それに引き続き、今回から何回かにわたって、各インターフェースの拡張の際に追加されているメソッドを見ていきます(一覧)。メソッドは独…

Java SE 6 のコレクション・フレームワーク (2) Map 編

Java SE 6 のコレクション・フレームワーク (Collection Framework) に含まれる java.util.Map のサブタイプのクラス図(一覧)。 緑の枠中に描いてあるのは各インターフェースの実装クラスです*1。 インターフェースもクラスも java.util パッケージと java…

Java SE 6 のコレクション・フレームワーク (1) Collection 編

Java SE 6 のコレクション・フレームワーク (Collection Framework) に含まれる java.util.Collection のサブタイプのクラス図(一覧)。 緑の枠中に描いてあるのは各インターフェースの実装クラスです*1。 インターフェースもクラスも java.util パッケージ…

システム・プロパティ

サンマイクロシステムズ (Sun Microsystems) の JDK に付属している JRE (バージョン 1.6.0_01)のシステム・プロパティ。 System.getProperties() によって取得。 OS は Windows XP SP2。 プロパティ名 プロパティ値 awt.toolkit sun.awt.windows.WToolkit…

リソースの読み込み

Java プログラムからリソース(ファイル)を読み込む方法を幾つか紹介。 以下で見る方法は、どれも java.io.InputStream を取得する方法ですが、どのフォルダを基点にするかが違います。 ここで見るのは次の3つです: ベース・フォルダ上のファイル ソースフ…

java.util.logging パッケージ 基礎の基礎

Maven2 で commons-logging 1.1 を使うのは気が乗らないので(前回参照)、Java の標準 API に含まれている java.util.logging パッケージの簡単な使い方を見てみましょう(一覧)。参考 URL はJava TM Logging Overview と API ドキュメントです。基本的な…