Lambda の罠
このところ Java 8 で注目の Lambda を NetBeans 8 Dev を使ってネットから情報収集して楽しんでます。
今回は絶対はまりそうなコードを紹介します。
Lambda に興味がある人は既にご存じかと思いますが、なかなか面白そうなのでよかったら見てください。
では次のプログラムを実行したらどうなるでしょうか?
jp\yucchi\mylambda_2\MyLambda_2.java |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package jp.yucchi.mylambda_2; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Spliterator; import java.util.concurrent.ConcurrentHashMap; public class MyLambda_2 { private final static int WOW = 1_000; public static void main(String... args) { Map<Integer, Integer> m = new ConcurrentHashMap<>(); for (int i = 0; i < WOW; i++) m.put(i, i); List<Integer> root = new ArrayList<>(); m.keySet().spliterator().forEach(root::add); List<Integer> _root = new ArrayList<>(); Spliterator<Integer> right = m.keySet().spliterator(); Spliterator<Integer> left = right.trySplit(); left.forEach(_root::add); right.forEach(_root::add); System.out.println(_root.size() == root.size()); System.out.println(_root.equals(root)); System.out.println(new HashSet(root).equals(new HashSet(_root))); } } |
簡単じゃないかと思ったあなた!
正解です。(^_^)
私のコンピュータでの実行結果は次のようになります。
run:
true
true
true
BUILD SUCCESSFUL (total time: 0 seconds)
では、このプログラムの WOW 定数をもっと大きな値にしてみたらどうなるでしょうか?
11 private final static int WOW = 10_000;
それでは実行してみます。
run:
true
false
true
BUILD SUCCESSFUL (total time: 0 seconds)
とても素敵な結果が表示されました。(;゜ロ゜)
たぶん、感の鋭い方なら 25 行目のコードをみただけでこのような結果になるのは容易に想像できたでしょう。
これって絶対はまりそうな気がするのは私だけでしょうか?
TAGS: Java | 2013年3月20日5:54 AM
Comment
ゆっちのBlog » Lambda の罠 解決編
Trackback
2013年3月29日11:27 AM(編集)
[...] ちょっと前に Lambda の罠 というエントリーを書いた。 [...]
Trackback URL