首页 > 解决方案 > 从对象列表中获取最大值

问题描述

我正在尝试从我的国家/地区列表中获取最大值(例如,最大值)是否可以尝试在对象列表中使用 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();
}

标签: javaoopinterface

解决方案


使用 Java 8 Streams,您的maximum()方法的主体可能如下所示:

Arrays.stream(objects).max(Comparator.comparingInt(Measurable::getMeasure))

但请记住,上面的行将返回可选项,因此要么更改方法签名以返回可选项,或者(如果您坚持保持“原样”),考虑如何解决不存在可选项的情况(例如抛出异常或返回一些虚拟对象,如new Country("dummy", 0);.


推荐阅读