Java 8 - Lambda / Stream API の編集履歴

nishikawa が 2015-06-19 22:45 に編集

--- Ver.1	2015-01-05 23:42:22+09:00
+++ Ver.2	2015-06-19 22:45:43+09:00
@@ -5,12 +5,12 @@
 今回はこの中のラムダ式と Stream API を取り上げます。
 
 
-## ラムダに関連する構文拡張 ##
+# ラムダに関連する構文拡張 #
 
 Java 8 では Java 言語に対していくつかの構文拡張がなされました。ここでは
 ラムダに関連する構文拡張について見ていきます。
 
-### ラムダ記法 ###
+## ラムダ記法 ##
 
 Java 言語でラムダ式を書けるようになりました。新たに次のような式が書ける
 ようになりました。
@@ -32,7 +32,7 @@
 ます。
 
 
-### 関数型インタフェース ###
+## 関数型インタフェース ##
 
 概念として追加されています。抽象メソッドをひとつだけ持つインタフェースを、
 関数型インタフェースと呼びます。インタフェースの定義に
@@ -43,7 +43,7 @@
 て利用できます。
 
 
-### メソッド参照 ###
+## メソッド参照 ##
 
 関数型インタフェースの変数に、メソッドそのものを代入することができるよ
 うになりました。
@@ -93,7 +93,7 @@
 `Boolean` を返す関数型インタフェースの変数になります。
 
 
-### デフォルトメソッド ###
+## デフォルトメソッド ##
 
 インタフェースにメソッドのデフォルト実装を定義できるようになりました。`List`
 や `Map` など、既存 API で定義されていたインタフェースにラムダを利用したメソッ
@@ -230,9 +230,9 @@
 ```
 
 
-## ラムダの基本 ##
-
-### 無名内部クラス vs ラムダ式 ###
+# ラムダの基本 #
+
+## 無名内部クラス vs ラムダ式 ##
 
 ラムダが追加される前、すなわち Java 7 以前では、いわゆるラムダ的なこと
 を表現する際には無名内部クラスという機能を使っていました:
@@ -326,7 +326,7 @@
 ```
 
 
-### ラムダ式の型 - 関数型インタフェース ###
+## ラムダ式の型 - 関数型インタフェース ##
 
 Java 言語におけるラムダ式とは何か?その答えは「関数型インタフェースの型
 を持つオブジェクト」です。
@@ -391,7 +391,7 @@
 ```
 
 
-### 汎用的な関数型インタフェース - java.util.function ###
+## 汎用的な関数型インタフェース - java.util.function ##
 
 関数型インタフェースの例として `Runnable` や `Comparator` を挙げてきました。
 Java 7 以前の API では、こういった具合に用途に応じたインタフェースが用
@@ -442,7 +442,7 @@
 けにも用意されています。他のプリミティブ型については諦めたようです。
 
 
-## Optional ##
+# Optional #
 
 Java 8 では `java.util.Optional` というクラスが追加されました。`Optional`
 は `null` になりうる値をラップするクラスです。`null` になりうる箇所を
@@ -532,7 +532,7 @@
 `null` を代入することがないよう、プログラマが注意する必要があります。
 
 
-## Stream API ##
+# Stream API #
 
 ラムダのよくある用法として、リストに対する操作を、制御構文を使わず簡潔
 に書けるというものがあります。例えば Java のこんなコードが:
@@ -578,7 +578,7 @@
 といった具合になります。
 
 
-### Stream API を使ってみる ###
+## Stream API を使ってみる ##
 
 Java 7 以前のプログラムを Stream API を使って書きなおしてみます。
 
@@ -638,7 +638,7 @@
 コードになっている点が素晴らしいですね。
 
 
-### 中間操作 ###
+## 中間操作 ##
 
 Stream の操作は大きく中間操作と終端操作に分けられます。Stream 操作のパ
 イプラインは 0 個以上の中間操作と、1 つの終端操作から成り立ちます。
@@ -675,7 +675,7 @@
 ことも分かります。
 
 
-### 終端操作 ###
+## 終端操作 ##
 
 終端操作は Stream をトラバースして結果や副作用を生成する操作です。
 `Stream.forEach` や `IntStream.sum` などが該当します。終端操作が完了すると
@@ -710,7 +710,7 @@
 `toLowerCase` でマップしようとしたところで例外が発生しています。
 
 
-### 独自の中間操作 ###
+## 独自の中間操作 ##
 
 Stream API を利用していると、あらかじめ用意されている中間操作、終端操作
 では事足りず、独自の中間操作、終端操作を実装したくなるかもしれません。
@@ -780,7 +780,7 @@
 ど) ことで、並列パフォーマンスの向上を狙うことができるようです。
 
 
-## ラムダ式の実行 ##
+# ラムダ式の実行 #
 
 ラムダ式の呼び出しはインタフェースのメソッドと同様であるということは前
 述した通りです。では、ラムダ式そのものの実行 (= ラムダ式から関数型イン
@@ -792,7 +792,7 @@
 ていきます。
 
 
-### ラムダ式のコンパイル結果 ###
+## ラムダ式のコンパイル結果 ##
 
 さっそくですが、ラムダ式のコンパイル結果を見てます。
 
@@ -857,7 +857,7 @@
 を、この `invokedynamic` 命令が行います。
 
 
-### invokedynamic ###
+## invokedynamic ##
 
 `invokedynamic` は Java 7 から追加された JVM の呼び出し命令です。Java 6
 以前は 4 つの呼び出し命令がありました:
@@ -890,7 +890,7 @@
 他の 4 つの呼び出し命令と大きく異なります。
 
 
-### ラムダ式の bootstrap メソッド - LambdaMetafactory.metafactory ###
+## ラムダ式の bootstrap メソッド - LambdaMetafactory.metafactory ##
 
 前述した通り、ラムダ式は `invokedynamic` 命令にコンパイルされます。ラム
 ダ式の `invokedynamic` 命令には `LambdaMetafactory` クラスの
@@ -1194,7 +1194,7 @@
 となります。
 
 
-### プロキシクラス ###
+## プロキシクラス ##
 
 ラムダ式の `invokedynamic` 命令には `LambdaMetafactory` の
 `metafactory` メソッドが bootstrap メソッドとして関連付けられます。

nishikawa が 2015-01-05 23:42 に投稿