RT @stuartmarks: @jodastephen *still* hacking on #DevoxxUK lambda puzzles in the almost-empty keynote room. twitter.com/stuartmarks/st…#java8
— adoptopenjdkさん (@adoptopenjdk) 2013年3月31日
ということで朝食にします。
Hatena タグ: Java
RT @stuartmarks: @jodastephen *still* hacking on #DevoxxUK lambda puzzles in the almost-empty keynote room. twitter.com/stuartmarks/st…#java8
— adoptopenjdkさん (@adoptopenjdk) 2013年3月31日
ということで朝食にします。
ちょっと前に 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)
それでは夜勤真っ只中なのでそろそろ寝ようかな。
まだたくさん試してみたいことがあるよう!!
それでは (*’-‘)ノ~