![](/img/trans.png)
[英]How to iterate through an ArrayList and only pull out 1 field from each object
[英]How to pull a field from an object stored in an arraylist?
我可以拿一些可以分解並研究它們如何工作的代碼示例嗎? 具體來說,我需要弄清楚如何從列表中的x編號對象獲取地址字段? 如何從列表中刪除第x個對象? 如何將對象x的價格字段設置為新值?
我了解houseList.add如何將數據放入附加到列表末尾的新對象中,但我不了解它的相反含義以及如何定位特定對象並對其進行操作。 請顯示一個有效的多類示例。 謝謝!
創建House對象的類,它包含以下信息;
public House(int address, String street, double price, int rooms) {
this.address = address;
this.street = street;
this.price = price;
this.rooms = rooms;
}
它具有以下方法...
public void SetAddress (int address){
setAddress(address);
}
private void setAddress (int address){
this.address = address;
}
public int GetAddress (int address){
address = getAddress(address);
return address;
}
private int getAddress (int address){
return address;
}
@Override
public String toString() {
return address + " " + street + " " + price + " " + rooms;
}
等等...
在另一個類中,我聲明一個名為houseList的House對象的列表,它是一個ArrayList。
List<House> houseList;
houseList = new ArrayList();
並可以填充數據,
houseList.add(new House(this.address, this.street, this.price, this.rooms));
然后遍歷...
public void showHouses() {
Iterator<House> itr = houseList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next().toString());
}
}
到目前為止,除了toString方法已被覆蓋之外,上面列出的House方法都沒有起作用。 我還無法弄清楚如何為列表的第x個元素提取this.street或this.price。 我可以使用houseList.add(new House(this.address,this.street,this.price,this.rooms))將數據放入列表中;
我可以看到我的數據在迭代時按預期方式存儲。 我有這些setter和getter,但我不了解如何使用它們將這些項目拉出或放入。由於我使用了houseList.add,所以我發現add的反面是get,但沒有找出正確的語法。
itr.next()
返回列表中的下一個可用的House對象。 您需要在該內部對象上調用方法。
例:
while (itr.hasNext()) {
House hs = itr.next();
System.out.println(hs.getAddress(input));
System.out.println(hs.toString());
}
固定吸氣劑
首先,應對吸氣劑/吸氣劑。 以下getter:
private int getAddress (int address){
return address;
}
應該固定為以下形式:
private int getAddress() {
return address;
}
在您的代碼中,您的getAddress(int address)
方法具有一個int參數,並直接返回該參數。 它甚至不查看存儲地址值的字段。
遍歷列表
您可以重寫以下內容:
public void showHouses() {
Iterator<House> itr = houseList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next().toString());
}
}
以更緊湊的方式,使用Java-5樣式for
循環,如下所示:
public void showHouses() {
for (House house : houseList) {
System.out.println(house);
// or, say: System.out.println(house.getAddress());
}
}
或類似這樣,如果您真的想使用迭代器:
public void showHouses() {
Iterator<House> itr = houseList.iterator();
while (itr.hasNext()) {
House house = itr.next();
System.out.println(house);
// or, say: System.out.println(house.getAddress());
}
}
請注意,在上面的示例中,您通常需要注意,每次迭代僅調用next()
。 即:將itr.next()
分配給局部變量,並使用該變量,而不是每次迭代都多次調用itr.next()
。
第一種方法的優點是它更短。 很明顯,您要做的只是遍歷集合,而不以任何方式修改它(盡管您仍然可以修改其值)。
第二種方法的優點是您可以遍歷(迭代)集合時調用itr.remove()
從集合中刪除元素。
第十宮
如果您需要第x家,可以寫:
int x = ...;
House h = houseList.get(x);
System.out.println(h);
// or: System.out.println(h.getAddress());
。
編輯:
這是您有時會在遍歷列表的代碼中看到的另一種模式:
for (Iterator<House> it = houseList.iterator(); it.hasNext();) {
House house = it.next();
// Blah, blah..
}
這具有與上面基於迭代器的遍歷相同的優點。 但是,此版本將迭代器變量( it
)的范圍限制為循環體。 在上述版本中,迭代器變量的范圍是整個方法主體。 因此,很容易看出您從未在循環外使用迭代器。
當您要在一個方法(或其他塊)中執行多個基於迭代器的遍歷時,將范圍限制在循環主體中也很有用。 它還允許您在第二個循環中重復使用相同的變量名(即使第二個循環遍歷其他類型的集合)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.