从具有最高值的arraylist返回对象?

时间:2015-04-16 23:01:02

标签: java object arraylist return

我正在尝试从包含的arraylist中返回一个对象 不同的对手为我的基于文本的格斗游戏。对手中的对手 arraylist有不同的“致命等级”,分开一个简单的对手 一个艰难的。

以不同方式解释;假设我的arraylist中有三个对手,他们分别有30,40和50的致命等级。我想回来 他们中最致命的,那就是那个有50级致命等级的对手。

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

4 个答案:

答案 0 :(得分:6)

如果你想要最高级别,那就是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 Streams。

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的提交者。

答案 1 :(得分:4)

创建一个Comparator,用于比较对手的等级并使用Collections.max(oponentList , theComparator)

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

  

使用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());
    }
}