JSゆるふわめも

がっこうでべんきょうしたことをめもがきしてます

CuncurrentHashMap.reduceEntriesメモ

reduceEntries
public Map.Entry reduceEntries(long parallelismThreshold,
                                    BiFunction,Map.Entry,? extends Map.Entry> reducer)
指定されたリデューサを使用して値を結合することにより、すべてのエントリの累積結果を返します。結果がない場合はnullを返します。
パラメータ:
parallelismThreshold - このオペレーションを並列的に実行するために必要な(推定の)要素数
reducer - 交換可能性と結合性を持つ結合関数
戻り値:
すべてのエントリを累積した結果
導入されたバージョン:
1.8

自分は小学生並みの脳みそしか有していないので、これを見てもぱっと見よく話からない。 一つ一つ見ていく

戻り値はMap.Entry<K,V>

long parallelismThreshold 平行操作を実行する閾値、つまりここで指定したEntry以上の要素が存在すれば並列実行される

BiFunction<Map.Entry<K,V>,Map.Entry<K,V>,? extends Map.Entry<K,V>>

脳が崩壊しそうだ…

? extends Map.Entry<K,V> reducer(Map.Entry<K,V> entry,Map.Entry<K,V> entry) 上記のような形式のラムダ式を呼ぶことができる。

何となく分かった。で、最大値を検索?するサンプル

    ConcurrentHashMap<String, Integer> randomMap = new ConcurrentHashMap<String, Integer>();
    //10000個ランダムな値を生成
    new Random().ints(10000).forEach(value->randomMap.put(String.valueOf(value) , value));
    //
    Map.Entry<String, Integer> max = randomMap.reduceEntries(1, (e1,e2) -> e1.getValue() > e2.getValue() ? e1 : e2);
    System.out.println(max);