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

倭マン'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) - 独自コレクタを作る必要はない!? -

前回、簡単な独自コレクタを作ってみましたが、作ったコレクタをあちこちで使い回したりしないなら、ラムダ式と Stream インターフェースに定義されているメソッドで事足りるようです。コレクタの種類は大別して「値を返す」ものと「コンテナ・オブジェクト…

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

前回 parallel ストリームと concurrent コレクタに関してあれこれ試したワリにはにいまいちしっくり来てない状態なのですが、今回は独自コレクタを作ってみます。あまりキチンと言及してませんでしたが、Java 8 のコレクタには大まかに2つに分類することが…

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

Stream や Collector に関する記事をそこそこ書いてきて今さらいうのもアレですが、parallel ストリームと concurrent コレクタに関してちょっと(というか根本的に?)勘違いしてた気がするので、ちょっとここいらに関する記事を書いておくことに。java.uti…

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

前回までで java.util.stream.Collectors クラスで取得できる Collector オブジェクトの使い方を見ました。 そこでは基本的な使い方を見ていたので Collector インターフェース自体の API には触れてませんでした。 なので、それらの API を改めて見ていたの…

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

前回に引き続き、今回は Map を返す Collector を見ていきます。 前回にも増して引数の型パラメータを見てるとクラクラするぅ。 まぁ、前回同様、返り値の Collector の第2型パラメータあたりを中心に見ておけばいいんじゃないかなぁ。 今回扱うのはこの部分…

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

今回から何回かに分けて java.util.stream パッケージに定義されている Collectors クラスに定義されているメソッドを見ていきます。目次蒐集してやんよ java.util.stream.Collectors クラス Map 以外を返す Collector Map を返す Collector 内蔵コレクタの…

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

前回までで Stream インターフェースに定義されているメソッドは大体見たので、今回はプリミティブ型のストリーム(以下、プリミティブ型ストリーム)を見ていきます。 プリミティブ型ストリームには IntStream LongStream DoubleStream (どれも java.util.…

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

今回は Stream インターフェースに定義されている static メソッドを見ていきます。 というか、Java 8 からインターフェースに static メソッドが定義できるようになったんですな。 Stream インターフェースに定義されている static メソッドはどれも Stream…

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

今回は Stream インターフェースに定義されている stateful intermediate operator に対応するメソッドを見ていきます。 stateful intermediate oprerator は「状態保有中間演算子」と訳せばいいんでしょうか。 「中間演算子」なので、返り値として新たな St…

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

今回は前回に引き続き intermediate operator (中間演算子)を見ていきます。 今回扱うのはストリームの要素はそのままで、その種類を変更する中間演算子です。 ストリームの種類とは逐次 (sequential) か並行 (parallel) か、整列されているか (sorted) さ…

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.util.stream.Stream インターフェースに定義されている intermediate operators を見ていきます。 「intermediate operator」は訳すと「中間演算子」ですかね? Map / Reduce 処理でいう Map 処理を行う演算子で、Stream オブジェクトを別の…

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

今回は Stream インターフェースに定義されている short-circuiting terminal operator に分類されるメソッドを見ていきます。 terminal operator は前回まで扱っていた「終端演算子」ですが「short-circuiting」は Java の && 演算子のような「ショートカッ…

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.util.stream.Stream インターフェースに定義されている terminal operator (終端演算子) の残りを見ていきます。 どれも Stream の要素を集めた「コンテナ」風のオブジェクトを返します。 扱うメソッドは以下の4つ: Iterator<T> iterator() Obje</t>…

小川のせせらぎもやがてはうねる奔流に 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) : 特定のクラスに固有のメソッド

今回は Class クラスに定義されているメソッドのうち、特定の型に特有のメソッドを見ていきます(目次)。 特定の型に特有のメソッドとは、例えば「配列に対して要素の型を返すメソッド」のようなものです。 このメソッドは、配列以外に対しては意味がなく、…

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

今回でとりあえず Class クラスのメソッドはコンプリート!(Java 6) 最後に残ってるのはよくわからんのバッカリなので流します(目次)。クラスローダ ClassLoaderまずはクラスのクラスローダに関連するメソッド。 クラスローダは大切ですね。 以下の「リソ…

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

今回はメンバへのアクセスを行うメソッド(目次)。 ここで、メンバとして扱うのは フィールド コンストラクタ メソッド 内部クラス の4つです。メンバへのアクセス一般各メンバを見ていく前に、まず一般的注。まず、各 Member (Field, Constructor, Method,…

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

今回はクラス階層とインスタンスに関連するメソッドを見ていきます(目次)。クラス階層 Class Hierarchyまずはクラス階層に関連するメソッド。 これらは返り値もしくは引数に Class オブジェクトが割り当てられているもの(の一部)です。 具体的に列挙する…

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

今回は Class クラスに定義されているメソッドのうち、クラスの宣言に関するメソッドを見ていきます(目次)。クラス宣言に関するメソッドクラス宣言に関するメソッド*1は、ここでは以下のような Java コードに含まれている要素とします: package org.sampl…

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

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

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

Class オブジェクトに定義されているメソッドを使うためには、まず 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 ドキュメントです。基本的な…