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 タグ:

NetBeans 8 Dev を使って Lambda で遊ぶ その7

今日は substream() メソッドを使ってみます。

これを使って MyLambdaSample プロジェクトの MyLambdaSample.java に MyBestMember を FightingPower 詳細昇順ソート 最初から3人までスキップさせます。

使い方は簡単で substream() メソッドの引数にスキップさせたい要素数を渡せばいいだけです。

コードは下記のようになります。

jp\yucchi\mylambdasample\MyLambdaSample.java
// MyBeatMember を FightingPower 詳細照準ソート 最初から3人までスキップする
System.out.println("<-- MyBeatMember を FightingPower 詳細昇順ソート 最初から3人までスキップする -->");
member.parallelStream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE
        && m.getAge() >= 16
        && m.getAge() <= 29
        && m.getBreast() >= 76)
        .sorted((o1, o2) -> o1.getFightingPower() - o2.getFightingPower())
        .substream(3)
        .collect(Collectors.toList())
        .forEach(e -> {
    System.out.println(e.getName() + ", " + e.getAge() + "歳, "
            + "Gender : " + e.getGender() + ", " + "Breast Size : "
            + e.getBreast() + ", FightingPower : " + e.getFightingPower());
});

とても便利ですね!

実行結果も確認しておきましょう。

<– MyBeatMember を FightingPower 詳細昇順ソート 最初から3人までスキップする –>
北川 景子, 26歳, Gender : FEMALE, Breast Size : 78, FightingPower : 80
綾瀬 はるか, 28歳, Gender : FEMALE, Breast Size : 88, FightingPower : 85
佐々木 希, 25歳, Gender : FEMALE, Breast Size : 80, FightingPower : 85
石原 さとみ, 26歳, Gender : FEMALE, Breast Size : 82, FightingPower : 89

Java 8 の Lambda とても素敵です。(^_^)

Hatena タグ: ,