如何从java中的对象列表中提取数组
希望你不要介意我在问一个关于对arrayList/List使用迭代器的新手问题。如何从java中的对象列表中提取数组
我有一个建筑类有几个数据成员:
public Building() {
private String buildingName;
private String buildingType;
private double width;
private double length;
private String managerName;
....
}
我已经设置的toString()作为后续访问的名称的字符串,我不允许改变的toString返回不同的数据成员。
public String toString() {
return buildingName;
}
我已经加载building.xml文件创建的一堆建筑类建筑物的对象,我已经使用迭代器创建buildingNames在秋千组合框被视为数组/列表(但让我们忽略那些Swing组件下方并专注于只是逻辑):
// Create building combo box model.
buildingComboBoxModel = new DefaultComboBoxModel<Building>();
buildingsCache = new ArrayList<Building>(buildings);
Iterator<Building> i = buildingsCache.iterator();
while (i.hasNext()) buildingComboBoxModel.addElement(i.next());
// Create building list.
buildingComboBox = new JComboBoxMW<Building>(buildingComboBoxModel);
buildingComboBox.addActionListener(this);
buildingComboBox.setMaximumRowCount(10);
buildingSelectPanel.add(buildingComboBox);
你有多少种方法都可以想到的,在放在一起用iterator没有显著代码更改的buildingType的名单怎么样?
如果我需要添加一个字符串,以它来修改在某些情况下一些buildingType字符串,
说,在一个建筑中,
String buildingName = "Adam's Place";
String buildingType = "Greenhouse";
[编辑后]
例如我需要将buildingType更改为“Adam's Place”的“Greenhouse Type 1”,并将另一个建筑的BuildingType更改为“Greenhouse Type 2”
可以使用迭代器完成,以及如何实现?
如果不是,其他方式欢迎
在此先感谢!
处理从iterator
读取的对象没有特殊的方法。如果只需要对Building
类别的成员设置不同的值,可以用标准方式完成,即通过添加成员设置器函数。
例如,修改buildingType
在任何时间,需要一种setBuildingType()
方法:
public class Building {
private String buildingName;
private String buildingType;
private double width;
private double length;
private String managerName;
....
public void setBuildingType(String buildingType) {
this.buildingType = buildingType;
}
}
鉴于上述情况,在基于迭代器的代码可以作如下修改:
Iterator<Building> i = buildingsCache.iterator();
while (i.hasNext()) {
Building b = i.next();
b.setBuildingType("Whatever type");
buildingComboBoxModel.addElement(b);
}
好吧b.setBuildingType(“无论类型”)将使我能够将buildingType更改为任何我想要的。但是,在我开始修改某些buildingType之前,如何从Building对象中首先创建所有BuildingType的列表(现在可以重复),以使列表显示在ComboBox上? – mk7 2014-10-29 04:53:57
如果我这样做:while(i.hasNext()){ \t \t \t Building b = i.next(); \t \t buildingComboBoxModel.addElement(b。getNickName()); \t \t},这是行不通的,因为b.getNickName()是一个字符串,而不是一个Building对象。 – mk7 2014-10-29 05:04:02
听起来像你需要将建筑物类型放在组合框的标签中。检查相应的Java教程页面:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html – PNS 2014-10-29 19:13:09
凡205是从哪里来的? – 2014-10-28 23:02:41
我刚编辑我的问题。我的意思是我需要使buildType比xml文件中的更具体一些。 – mk7 2014-10-28 23:08:43