簡體   English   中英

使用 for 循環填充 ArrayList

[英]Fill ArrayList using for loop

我通過以下方式創建了一個名為 City 的 class 的 arrayList ,其中只有一個城市名稱的參數:

static ArrayList<City> citiesList = new ArrayList<City>() ;

我想在另一個 class 中通過我作為名為 name 的參數傳遞的文本字段填充此 arrayList。我所做的是(注意系統輸出打印是為了方便我檢查輸出):

public void createCity(String name) {
        if(ApplicationFx.citiesList.isEmpty()) {
            ApplicationFx.citiesList.add(new City(name));
        }
        for(int i=0;i<ApplicationFx.citiesList.size();i++) {
            if(!ApplicationFx.citiesList.get(i).getCityName().equals(name)) {
                System.out.println(i +  "   " + ApplicationFx.citiesList.get(i).getCityName() + " " + name);
                ApplicationFx.citiesList.add(new City(name));
                
            }
        }
        
    }

如果按下添加城市按鈕,事件處理程序會調用 createCity 方法,我的問題是我想檢查某個名稱是否已經存在,但是當我運行代碼時,我會在控制台中打印以下內容:

0    CITY1    CITY2
0    CITY1    CITY3
0    CITY1    CITY4
0    CITY1    CITY5
0    CITY1    CITY6

請注意,CITY1 是我沒有系統輸出的第一個輸入。任何解決方案?提前謝謝!

如果City class 的唯一屬性是名稱,那么定義一個比較名稱的equals方法是有意義的:

import java.util.Objects ;

public class City {

    private final String name ;

    public City(String name) {
        this.name = name ;
    }

    public String getCityName() {
        return name ;
    }

    @Override
    public boolean equals(Object o) {
        if (o == this) return true ;
        if (! (o instanceof City)) return false ;
        return Objects.equals(((City) o).getCityName(), name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

那么你所需要的就是

public void createCity(String name) {
    City newCity = new City(name);
    if(! ApplicationFx.citiesList.contains(newCity)) {
        ApplicationFx.citiesList.add(newCity);
    }
}

如果由於某種原因equals()方法不適合您的 class,您可以這樣做

public void createCity(String name) {
    for (City city : ApplicationFx.citiesList) {
        if (city.getCityName().equals(name)) return ;
    }
    ApplicationFx.citiesList.add(new City(name));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM