Java 包含另一个列表的列表

Java 包含另一个列表的列表,java,Java,我的应用程序中有一个对象Customer,它有一个客户列表 public class CustomerList { private List<Customer> } 公共类客户列表 { 私人名单 } customer类依次有一个列表,其中列出了他们在一周中某一天在商店购买的所有商品 public class Customer { private List<String> itemsOnMonday; private List<String> itemsO

我的应用程序中有一个对象Customer,它有一个客户列表

public class CustomerList
{
private List<Customer>
}
公共类客户列表
{
私人名单
}
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.
}
for(客户:客户列表)
{
列表项=新建ArrayList();
items.addAll(itemsOnMonday);
//所以一直到周五。
}
这太疯狂了,因为我最终会在for循环中创建1000多个对象。有没有更好的办法?我们绞尽脑汁已经有一段时间了,还不能想出一个有效的实现方案来实现这一点。任何帮助都将不胜感激。

如何使用和使用
客户的物品:

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

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

将一周中的几天显示为枚举,并使用类存储购买的物品列表:

EnumMap<Weeekday, List<String>> boughtItems;
EnumMap项目;

这听起来一点也不疯狂。您没有创建任何新对象(新列表除外)。您只是创建指向相同对象的新列表。有点疯狂的是有5个不同的列表(每天一个),而不是一张有5个桶的地图。您可以阅读有关地图的内容。我将首先为
ItemPurchased
创建一个单独的类,并只使用一个列表,而不是每天使用5个不同的列表。可能将工作日信息存储在
ItemPurchased
本身中。@jahroy-我们没有创建7个不同的列表,因为我们想创建。我们从JSON字符串获取数据,该字符串包含作为数组的项:(回到基础。你想用它实现什么?如果你想得到某种类型的报告,你可能最好坚持将信息保存在数据库中,并在其上使用BI工具。
ArrayList
初始化需要在循环之外进行。与这里相比,稍微提高一点效率是将
ArrayList
的初始容量设置为所有列表大小之和。这将避免它花费时间自动扩展,因为所有需要的空间都已分配,并且内存效率将提高,因为只创建了一个后端阵列,而不是多个后端阵列来获取新空间。或者不使用番石榴:
Map
是的,你可以使用
Map
但是访问周项目不那么直接;@RC-我喜欢你的想法。让我和我的同事核实一下他的想法;)非常感谢。值得一提的是,番石榴还有一个迭代器方法。这里有一个后续问题。如果让我们假设我创建了一个填充数据的静态方法,那么该如何标记该方法的返回类型?我的意思是-如果我有公共静态列表getListOfItems(){for(Customer-Customer:customerList){List items=new ArrayList();items.addAll(itemsOnMonday);//一直到星期五。},那么如何将这个列表对象返回给方法,因为它是在for循环中声明的?
EnumMap<Weeekday, List<String>> boughtItems;