2013-07-27 512 views
4

我的應用程序中有一個客戶Customer,它有一個客戶列表。包含另一個列表的列表

public class CustomerList 
{ 
private List<Customer> 
} 

客戶類別反過來有一個列表,他們列出了他們在一週某一天在商店購物的所有物品。

public class Customer 
{ 
private List<String> itemsOnMonday; 
private List<String> itemsOnTuesday; 
private List<String> itemsOnWednesday; 
private List<String> itemsOnThursday; 
private List<String> itemsOnFriday; 
} 

現在,我想列出顧客在給定周內購物的所有商品。做這個的最好方式是什麼?我的同事建議我創建另一個列表,並將項目添加到此列表中。我不相信這是一個好方法。我有超過1000位顧客,每位顧客每週購物超過500件。他認爲這樣的事情 -

for(Customer customer:customerList) 
{ 
List<String> items = new ArrayList<String>(); 
items.addAll(itemsOnMonday); 
//So on until Friday. 
} 

這是瘋了,因爲我最終會產生內部的1000多對象的循環。有沒有更好的方法來做到這一點?我們已經頭腦風暴了一段時間了,無法想出實現這一目標的有效實施。任何幫助都感激不盡。

+2

這聽起來並不瘋狂。您不會創建_any_新對象(除了您的新列表)。您只是創建指向相同對象的新列表。有5個不同的列表(每天一個)代替一個帶有5個桶的地圖,這真是太瘋狂了。你可以閱讀關於地圖[這裏](http://docs.oracle.com/javase/7/docs/api/java/util/Map.html)。 – jahroy

+1

我會開始爲'ItemPurchased'創建一個單獨的類,並且每天只使用一個列表而不是5個不同的列表。大概在'ItemPurchased'本身中存儲星期幾信息。 –

+0

@jahroy - 我們還沒有創建7個不同的列表,因爲我們想要。我們從一個JSON字符串中獲取數據,其中包含項目數組:( – rickygrimes

回答

5

有關使用guavaMultimapenumCustomer的項目是什麼:

public static enum Weekday { 
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 
} 

public class Customer { 
    private Multimap<WeekDay, String> items = ArrayListMultimap.create(); 
    // getters, setters etc 
} 

則:周

// monday items: 
customer.getItems().get(Weekday.MONDAY); 

// week items: 
customer.getItems().values(); 
+0

或沒有番石榴:'地圖<週日,列表>' – jahroy

+0

是的,您可以使用'地圖<週日,列表>'但訪問周的項目是不直接;) – 2013-07-27 08:49:22

+0

啊哈......這很酷。第一次閱讀時我錯過了。 – jahroy

0

目前天爲一個枚舉和使用EnumMap類,用於存儲收購名單項目:

EnumMap<Weeekday, List<String>> boughtItems; 
相關問題