希望你不介意我要问一个新手问题,关于为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);
}

09-10 19:37