我正在尝试使用城市名称填充JComboBox。
我的程序有一个名为“Country”的类。 Country对象包含一个名为'City'的对象的HashMap,其方法为getName,返回一个String值。
public class Country {
private final Map<String, City> cities = new HashMap<>();
public Collection<City> getCities() {
return cities.values();
}
}
public class City {
String cityName;
public String getName() {
return cityName;
}
}
是否可以在不使用循环的情况下返回cityName的String数组?我正在尝试以下但它没有用:
Country country 1 = new Country();
String[] cityNames = country1.getCities().toArray();
JComboBox cityChoice = new JComboBox(cityNames);
这会返回一个City对象数组,但是我不知道如何将City getName方法与此结合使用。
答案 0 :(得分:1)
你无法避免循环。要么循环,要么Java将在后台循环。
如果地图中的键是城市名称,则可以避免编写自己的循环。然后,您只能从地图中询问.keySet()
。但是,即使在这种情况下,Java也会在后台循环并复制密钥。
其他方式是你循环,但在类中的某些方法(比如getCitiesArray()
)中隐藏循环。因此,您可以在调用方法中执行country1.getCitiesArray();
。代码看起来会更好并且更容易阅读,但是你仍然需要在类中包含循环。
答案 1 :(得分:0)
您可以将Map键存储为CityName,然后执行以下操作以获取名称。
cities.keySet();
答案 2 :(得分:0)
如果您使用的是Java 8,则可以使用Stream API将城市名称映射到字符串:
String []cityNames = country1.getCities().stream().map(City::getName).toArray(String[]::new);
答案 3 :(得分:0)
城市对象可以直接在组合框中使用,但有一些小的改动。
public class City {
String cityName;
public String getName() {
return cityName;
}
@Override
public String toString() {
return getName();
}
}
然后是人口代码
Country country1 = new Country();
City[] cities = country1.getCities().toArray();
JComboBox<City> cityChoice = new JComboBox<City>(cities);
您应该覆盖hashCode并等于。