2016-08-20 33 views
1

我目前正在開發一個項目。我正在努力爲商店創建一個管理系統。問題是我需要某種庫存收集,在添加已存在的相同名稱的元素(更新相同項目的數量)時,它的狀態(屬性stockLevel)會根據給定的數量更新。有誰知道哪個應該是最好讓這樣的事情做? Map,SetList最適合重複元素的Java集合

+0

希望很明顯,列表並不合適。看起來像一個集合或一個地圖將是最有意義的,不是?它的種類取決於你想如何訪問它。 –

+0

@DaveNewton提及添加重複值。根據定義,Set不適用於這種情況,至少沒有比它們的名稱屬性更復雜的方式執行不同的元素。 –

+0

你能定義你的「狀態」嗎?特別是爲什麼它嵌入在對象中? – fge

回答

3

那會a multiset (a.k.a. a bag)。您可以輕鬆地將自己的實現作爲一個Map<Item, Integer>進行滾動,或者使用其中一個現有類,例如Google Guava的Multiset。阿帕奇百科全書集合也有一個,所以做的Eclipse收藏等

1

其中,同時增加已使用相同的名稱 (更新同一項目的數量)它的狀態(屬性stockLevel) 會相應地更新存在的元素給定數量

在你的用例,Map是很好的儲存信息:

Map<Product, StockLevel>的代表與關鍵Product和值它的數量的地圖在股票:StockLevel

對於迭代在地圖上,您不能保留插入順序與HashMap,但爲您的需要,它不應該是一個問題。

不過,如果你想保持插入順序,當你重複它,或者你想要的地圖根據一些需要(按字母順序或其他方式)進行排序,你可以使用更復雜的地圖,如TreeMapLinkedHashMap

0

設置不允許重複的值,但這不是一個解決方案。如果你插入一個重複的值,它將被忽略。您可以選擇一個項目列表,然後循環查找重複項。可以添加一個if條件來增加它的狀態。

+0

當你可以在一個集合或映射中查找產品時,爲什麼要迭代一個列表?沒有理由保留多個項目,只是他們的相關數據。 –