Lambda の罠

このところ Java 8 で注目の Lambda を NetBeans 8 Dev を使ってネットから情報収集して楽しんでます。

今回は絶対はまりそうなコードを紹介します。

Lambda に興味がある人は既にご存じかと思いますが、なかなか面白そうなのでよかったら見てください。

では次のプログラムを実行したらどうなるでしょうか?

jp\yucchi\mylambda_2\MyLambda_2.java
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 m = new ConcurrentHashMap<>();
        for (int i = 0; i < WOW; i++) m.put(i, i);
        List root = new ArrayList<>();
        m.keySet().spliterator().forEach(root::add);
        List _root = new ArrayList<>();
        Spliterator right = m.keySet().spliterator();
        Spliterator 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 行目のコードをみただけでこのような結果になるのは容易に想像できたでしょう。

これって絶対はまりそうな気がするのは私だけでしょうか?

Hatena タグ:

「Lambda の罠」への1件のフィードバック

  1. ピンバック: ゆっちのBlog » Lambda の罠 解決編

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です