簡體   English   中英

迭代Java對象集合時 - 如何改變當前對象?

[英]While iterating over a collections of Java objects--how can I mutate current object?

我將使用迭代器來循環Java中的對象集合。 我對使用Iterator感到有點困惑(用於每個循環使用)。 假設我有這樣的代碼:

Iterator<Organization> orgIter = orgs.iterator();
while (orgIter.hasNext()) {
    Organization orgObj = orgIter.next();
    orgObj.setChildOrgsTree(generateOrgChildTree(orgObj, new ArrayList<Organization>()));
}

我創建一個新對象,然后更改對象內的字段。 我的計划是將我形成的原始對象設置為iteroter等於我創建的此對象的列表(列表未在上面顯示,但我只是發現我需要它)。

但是如果我不必創建一個新的Object來完成所有這些操作就會容易得多。 有沒有辦法可以獲得當前對象並改變它?

嘗試這個:

for(Organization org : orgs)
    org.setChildOrgsTree(generateOrgChildTree(org, new ArrayList<Organization>());

如果迭代器迭代ListQueue實例,則限制較少。 只要您不更改列表的結構,就可以使用Iterator.next()返回的對象執行任何操作。 當然,該特定對象的類應該允許它被修改,但我認為你可以添加必要的代碼......

另一方面,在不使Iterator對象失效的情況下允許的唯一列表結構修改是使用Iterator.remove()刪除當前元素,順便Iterator.remove() ,這是一個可選操作。 如果您嘗試直接修改列表,那么迭代器將失效,下次您嘗試使用它時將得到ConcurrentModificationException

另外,如果要迭代Set ,則通常會受到更多限制:根據實際Set實現的細節,您通常無法修改對象中的任意字段。 例如,一旦將對象插入HashSethashCode()返回的值就不會改變...

作為旁注,Java中for-each循環只是使用Iterator語法糖。 如果你不打算使用Iterator.remove() ,只需使用for-each循環而不是explicity迭代器並完成它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM