Bjö*_*ist 6 java collections max comparator java-8
在Java中查找您编写的序列的最大元素:
GameState bestGs = Collections.max(ns,
Comparator.comparing(e -> minimax(e)));
Run Code Online (Sandbox Code Playgroud)
这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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在Java中以"功能"的方式编写上述内容,但也保留了高性能.
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();
Run Code Online (Sandbox Code Playgroud)