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());
}
}
我正在尝试 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());
}
}