【发布时间】:2018-09-26 12:32:11
【问题描述】:
在 Java 中查找您编写的序列的最大元素:
GameState bestGs = Collections.max(ns,
Comparator.comparing(e -> minimax(e)));
这里minimax 是一个返回数字的函数,ns 是一个集合。该代码有效,但对于集合的每个元素,将多次评估 key 函数。我如何制作它以便每个元素只评估一次?在 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 中以“函数式”的方式编写上述内容,同时保持高性能。
【问题讨论】:
-
minimax()的结果可以用e作为键存储在封闭类中的 Map 中。首先检查地图,看看是否已经计算了值。
标签: java collections java-8 max comparator