我通过以下方式创建了一个名为City的类的arrayList,该类的唯一参数是城市名:
static ArrayList<City> citiesList = new ArrayList<City>() ;
我想在另一个类中通过一个文本字段填充此arrayList,我已将其作为参数传递给名为name的参数。我所做的是这件事(请注意系统输出是为了方便我检查输出): / p>
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是我的第一个输入,我没有sysout。有解决方案吗?。谢谢!!
答案 0 :(得分:0)
如果City
类的唯一属性是名称,则可以定义一个比较名称的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()
方法不适用于您的课程,则可以
public void createCity(String name) {
for (City city : ApplicationFx.citiesList) {
if (city.getCityName().equals(name)) return ;
}
ApplicationFx.citiesList.add(new City(name));
}