使用for-each循环返回arraylist

时间:2018-03-29 21:17:22

标签: java arraylist foreach

我在编写for-each循环时遇到问题,搜索arraylist并返回具有最高gdp的大陆的县名。这是我现在的代码。 (ElementsList是原始的ArrayList)

public Country highestGdp(String continent) {
    boolean flag;
    for (Country cont : ElementsList) {
        if (cont.getContinent().equals(continent)) {
            ArrayList<Country> TMP1 = new ArrayList<Country>();
            TMP1.add(cont);
            for (Country gdp : TMP1) {
                double max = 0;

                if (max < gdp.getGDP()) {
                    max = gdp.getGDP();

                }
                if (gdp.getGDP() == max) {
                    ArrayList<Country> TMP2 = new ArrayList<Country>();
                    TMP2.add(gdp);
                }
                return gdp;
            }
        }
    }
    return null;
}

2 个答案:

答案 0 :(得分:1)

每当您在右大陆找到一个国家/地区时,您可以检查它是否大于目前为止的最大值。不要每次都要遍历所有这些。

public Country highestGdp(String continent) {
    boolean flag;
    Country maxCountry = null;
    for (Country cont : ElementsList) {
        if (cont.getContinent().equals(continent)) {
            if (maxCountry == null) maxCountry = cont;
            if (maxCountry.getGDP() < gdp.getGDP()) {
                maxCountry = cont;
            }
        }
    }
    return maxCountry;
}

答案 1 :(得分:1)

很抱歉,但是你的代码有点乱;)

要快速解决您的问题,请尝试在循环之前移动max声明,如下所示:

[...]
double max = 0; 
for(Country gdp : TMP1){
[...]

我们可以看到TMP2完全没用,删除它:

 // ArrayList<Country> TMP2 = new ArrayList<Country>();    
 // TMP2.add(gdp);

您始终只使用1个元素创建TMP1列表,然后迭代它。这也没用,您可以直接在要添加到列表中的元素上执行代码。

对ElementList的第一次迭代是Country元素的列表,但是您迭代的元素称为cont(= continent),它是一个Continent而不是Country。是否打算使用国家/地区类来涵盖:国家和大陆?你打算有一个像“大陆包含许多国家”的树形结构吗?

从原始问题解决问题的最终代码应该是这样的:

 public Country highestGdp(String continent){
    Country countryWithMaxGdp = null;
        for(Country cont: ElementsList ){
        if(cont.getContinent().equals(continent)){
           if(countryWithMaxGdp == null || countryWithMaxGdp.getGDP() < cont.getGDP()){
             countryWithMaxGdp = cont;
            }    
        }
    }
    return countryWithMaxGdp;
 }