第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

具有昂貴自定義鍵功能的列表的最大值

具有昂貴自定義鍵功能的列表的最大值

在 Java 中查找您編寫的序列的最大元素:GameState bestGs = Collections.max(ns,        Comparator.comparing(e -> minimax(e)));這minimax是一個(gè)返回?cái)?shù)字的函數(shù),它ns是一個(gè)集合。代碼有效,但是對(duì)于集合的每個(gè)元素,關(guān)鍵函數(shù)將被評(píng)估不止一次。我如何制作它以便每個(gè)元素只評(píng)估一次?在 Python 中你只會(huì)寫max(seq, key = lambda e: minimax(e))Java 中一定有類似的東西嗎?不要告訴我自己寫forloop,這是我不應(yīng)該寫的21世紀(jì)!顯式循環(huán)代碼如下:GameState best = null;// Doesn't matter what scalar type is used.int bestScore = Integer.MIN_VALUE;  for (GameState n : ns) {    int thisScore = minimax(n);    if (thisScore > bestScore) {        bestScore = thisScore;        best = n;    }}我想在 Java 中以“函數(shù)式”方式編寫上述內(nèi)容,但也要保留高性能。
查看完整描述

3 回答

?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

你可以記住這個(gè)e -> minimax(e)函數(shù):


public static <T, S> Function<T, S> memoize(Function<T, S> function) {

    Map<T, S> cache = new HashMap<>();

    return argument -> cache.computeIfAbsent(argument, function);

}

然后,只需使用 memoized 函數(shù):


GameState bestGs = Collections.max(ns,

    Comparator.comparing(memoize(e -> minimax(e))));

編輯:這種方法需要GameState實(shí)現(xiàn)hashCode和equals 一致。這些方法也應(yīng)該運(yùn)行得非??欤ㄟ@是通常的情況)。


編輯 2:正如 M. Justin 在下面的評(píng)論中所說(shuō),這個(gè)解決方案不是線程安全的。如果要從多個(gè)線程使用記憶化函數(shù),則應(yīng)使用 aConcurrentHashMap而不是 a HashMap。


查看完整回答
反對(duì) 回復(fù) 2021-10-13
?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

import java.util.ArrayList;

import java.util.List;


import static java.lang.Integer.MIN_VALUE;

import static java.util.AbstractMap.SimpleEntry;


...


var bestEntry = ns.stream()

                  .map(i -> new SimpleEntry<>(i, minimax(i)))

                  .max(Map.Entry.comparingByValue())

                  .orElse(new SimpleEntry<>(null, MIN_VALUE));


var bestGameState = bestEntry.getKey();

var bestScore = bestEntry.getValue();

減少后,您將得到一個(gè)Optional<Pair<GameState, Integer>>可能包含最高minimax結(jié)果和相應(yīng)的GameState. 如果沒(méi)有游戲狀態(tài),我們返回默認(rèn)條目new SimpleEntry<>(null, MIN_VALUE)。


查看完整回答
反對(duì) 回復(fù) 2021-10-13
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

GameState max = ns.stream()

                 .collect(Collectors.toMap(str -> minimax(str), Function.identity(), (gs1, gs2) -> gs1,

                         (Supplier<Map<Integer, GameState>>)() -> new TreeMap<>(Comparator.reverseOrder())

                 )).values().iterator().next();


查看完整回答
反對(duì) 回復(fù) 2021-10-13
  • 3 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)