Lambda の罠 解決編

ちょっと前に Lambda の罠 というエントリーを書いた。

まぁ、結果は当然の結果である。

そこでこの問題を簡単に回避する方法を考えてみた。

おそらく前のエントリーをご覧の Java プログラマーさん達はすでにご存じかと思いますがブログねたということで(^_^;

LinkedHashMap<K,V>

これを使えばいいみたいですね。

間違ってたら優しくご指摘くださいませ。

ということで修正コードは次のようになります。

jp\yucchi\mylambda_2\MyLambda_2.java
package jp.yucchi.mylambda_2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
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 = 10_000_000;

    public static void main(String... args) {
//        Map m = new ConcurrentHashMap<>();
        Map m = Collections.synchronizedMap(new LinkedHashMap());
        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: 17 seconds)

それでは夜勤真っ只中なのでそろそろ寝ようかな。

まだたくさん試してみたいことがあるよう!!

それでは (*’-‘)ノ~

Hatena タグ: