Return arraylist 中具有最高值的对象?

Return object from arraylist with highest value?

我正在尝试 return 我拥有的数组列表中的一个对象,其中包含 我的基于文本的格斗游戏的不同对手。对手在 arraylist 有不同的 "deadlylevels",以将一个简单的对手与 一个艰难的。

换个说法;假设我的数组列表中有三个对手,他们的致命等级分别为 30、40 和 50。我要 return 他们中最致命的,所以那将是致命等级为 50 的对手。

我已经给了他们不同的致命等级,但我不确定如何 到 return 具有最高致命等级的对手。

创建一个Comparator来比较对手的水平并使用Collections.max(oponentList , theComparator)

如果你想要最高级别,那就是 max()。但是你想要最大的对手,按级别。在 Eclipse Collections 中,我们称该模式为 maxBy()。如果您可以将 ArrayList 替换为 MutableList,那么它将变为:

MutableList<Opponent> opponents = ...;
Opponent opponent = opponents.maxBy(Opponent::getDeadlyLevel);

如果您不能或不愿转换 ArrayList,您仍然可以在 Iterate 上使用静态实用程序。

Opponent opponent = Iterate.maxBy(opponents, Opponent::getDeadlyLevel);

您可以使用 Collections.max()Comparator.comparing() 来构建 Comparator

Opponent opponent =
    Collections.max(opponents, Comparator.comparing(Opponent::getDeadlyLevel));

或者您可以使用 Java 8 个流。

Optional<Opponent> optionalOpponent = 
    opponents.stream().max(Comparator.comparing(Opponent::getDeadlyLevel));
Opponent opponent = optionalOpponent.get(); // If you're sure there's at least one

注意:我是 Eclipse Collections 的提交者。

使用Stream#max()为相关属性提供函数:

List<Fighter> list; // given a list of Fighters
Fighter deadliest = list.stream()
    .max((a,b) -> a.getDeadlyLevel() - b.getDeadlyLevel())
    .get();

Use Comparator.comparing

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;


public class DeathMatch {
    public static void main(String[] arg){
        List<Opponent> list = Arrays.asList(new Opponent("ZZ",10),new Opponent("WW",50),new Opponent("MM", 30));
        Opponent deadliest = list.stream().max(Comparator.comparing(p->p.getLevel())).get();
        System.out.println(deadliest.getName()+","+ deadliest.getLevel());
    }
}