2014-10-28 121 views
2

希望你不要介意我在問一個關於對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」

可以使用迭代器完成,以及如何實現?

如果不是,其他方式歡迎

在此先感謝!

+0

凡205是從哪裏來的? – 2014-10-28 23:02:41

+0

我剛編輯我的問題。我的意思是我需要使buildType比xml文件中的更具體一些。 – mk7 2014-10-28 23:08:43

回答

1

處理從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); 
} 
+0

好吧b.setBuildingType(「無論類型」)將使我能夠將buildingType更改爲任何我想要的。但是,在我開始修改某些buildingType之前,如何從Building對象中首先創建所有BuildingType的列表(現在可以重複),以使列表顯示在ComboBox上? – mk7 2014-10-29 04:53:57

+0

如果我這樣做: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

+0

聽起來像你需要將建築物類型放在組合框的標籤中。檢查相應的Java教程頁面:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html – PNS 2014-10-29 19:13:09

相關問題