2013-07-27 286 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; 
相关问题