希望你不介意我要问一个新手问题,关于为arrayList / List使用迭代器。
我有一个带有几个数据成员的建筑类:
public Building() {
private String buildingName;
private String buildingType;
private double width;
private double length;
private String managerName;
....
}
我已经按如下所示设置了toString()来访问名称String,并且我不允许更改toString以返回其他数据成员。
public String toString() {
return buildingName;
}
我通过加载building.xml文件在Building类中创建了一堆建筑对象,并且使用迭代器创建了建筑物名称的数组/列表,以便在Swing ComboBox中查看(但我们忽略下面的那些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);
您能想到多少种方法,以及如何使用迭代器在不进行重大代码更改的情况下将buildingType列表组合在一起?
如果在某些情况下需要通过向其中添加一个字符串来修改某些buildingType字符串,
说在一栋楼里
String buildingName = "Adam's Place";
String buildingType = "Greenhouse";
[发布后编辑]
例如我需要将“ Adam's Place”的buildingType更改为“温室类型1”,并将另一座建筑物的buildingType更改为“温室类型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);
}