В Java для поиска максимального элемента последовательности, которую вы пишете:
GameState bestGs = Collections.max(ns,
Comparator.comparing(e -> minimax(e)));
Здесь minimax
- это функция, возвращающая число, а ns
- это коллекция.Код работает, но ключевая функция будет оцениваться более одного раза для каждого элемента коллекции.Как мне сделать так, чтобы он оценивался только один раз для каждого элемента?В Python вы просто пишете max(seq, key = lambda e: minimax(e))
Должно быть что-то подобное в Java?Не говорите мне, чтобы я написал forloop сам, это 21-й век, который мне не нужно было!
Явный код зацикливания выглядит так:
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, но также сохраняет высокую производительность.