java - 从对象列表中获取最大值
问题描述
我正在尝试从我的国家/地区列表中获取最大值(例如,最大值)是否可以尝试在对象列表中使用 for each 循环?我真的很想用最大的方法来做。我知道这个方法是错误的,但我正在尝试一些东西以最大限度地利用它
这是我的代码
class Main {
public static void main(String args[]) {
Measurable[] countries = new Measurable[3];
countries[0] = new Country("Uruguay", 176220);
countries[1] = new Country("Thailand", 514000);
countries[2] = new Country("Belgium", 30510);
Measurable maximum = maximum(countries);
}
public static Measurable maximum(Measurable[] objects) {
if (objects.length == 0) { return 0; }
for (Measurable obj : objects)
{
int area = obj.getMeasure();
}
return area;
}
}
class Country implements Measurable
{
private String name;
private int area;
public Country(String name, int area)
{
this.name = name;
this.area = area;
}
@Override
public double getMeasure() {
return area;
}
}
interface Measurable {
double getMeasure();
}
解决方案
使用 Java 8 Streams,您的maximum()
方法的主体可能如下所示:
Arrays.stream(objects).max(Comparator.comparingInt(Measurable::getMeasure))
但请记住,上面的行将返回可选项,因此要么更改方法签名以返回可选项,或者(如果您坚持保持“原样”),考虑如何解决不存在可选项的情况(例如抛出异常或返回一些虚拟对象,如new Country("dummy", 0);
.
推荐阅读
- graphviz - 如何在 Graphviz 中划掉一个节点?
- r - 根据分组和索引汇总一列中的值
- vuejs2 - 根据选择选项值过滤 Vue 列表
- javascript - 非顺序事件冒泡 onClick vs addEventListener
- graph - 在自然语言处理中使用图进行文本分类
- pandas - 在与其他数据框的多个匹配条件后将值分配给新的 df 列
- c# - 使用现有变量向方法参数添加注释的最实用方法是什么
- bash - bash $0 是否启动后台进程?
- vue.js - 遇到 vue-cli npm 安装错误
- python - pygame错误:即使我初始化了视频系统也没有初始化