2012-03-13 146 views
1

我正在尝试根据付款方式筛选以下购物车。 购物车包含其中包含物品清单和物品列表的付款方式列表。在java中筛选集合

现在,我想用信用卡提供的所有付款方式项目。有没有更好的方法来过滤它,而不是通过嵌套循环运行。

public class PaymentType { 
    private String paymentType; 
} 

public class Items { 
    private Integer itemId; 
    private List<PaymentType> paymentOptions; 
} 

public class Group { 
    private Integer sellerId; 
    private List<Items> itemList; 
} 

public class Cart { 
    private Integer cardId; 
    private List<Group> group; 
} 

感谢,

-Vijay

+1

支付类型应该真的是String而不是枚举? – kittylyst 2012-03-13 14:41:04

+0

付款确定为字符串。整个cart对象和其他对象都是我WSDL服务请求中的复杂数据类型的一部分。 – 2012-03-13 14:52:20

回答

1

这取决于你的意思是什么更好。

您可以维护一个存储此信息的HashMap。这样可以避免使用循环,但意味着您必须维护一个数据结构,这会增加复杂性,并且整体速度可能会变慢,具体取决于您如何使用它。

没有更多的信息,我会采取最简单/最短的方法来使用循环。

+0

实际上,购物车对象是我的WSDL服务请求上的一个复杂类型。我将根据所提供的规则整理清单并确定符合条件的项目。一个这样的规则是“所有支付网关信用卡项目”。我有更多的规则适用于购物车:)但数据结构定义。 – 2012-03-13 14:47:12

+0

对于每种类型的查询,您可能需要添加更多数据结构来缓存结果。或者如果你使用蛮力,它会更简单,也许更慢(但也许速度更快)。你可以在毫秒内循环100,000个项目,因此即使性能很重要,循环也是一种选择。 – 2012-03-13 14:51:14

0

我会为每个类添加方法以查找您感兴趣的对象,例如,方法List<Item> findItemsByPaymentType(PaymentType paymentType)至每个GroupCart。然后Cart中的那个将调用其每个组实例的Group类,然后在一个组合列表中收集所有单个组结果。

这仍然意味着你必须实现循环,但它将在每个类中以一个很好和干净的方式完成。更容易测试,更易于重复使用。

+0

车对象是我的服务请求的一部分,并自动生成:( – 2012-03-13 14:48:59

+0

嗯,这太糟糕了 - 对于一些真正的面向对象设计来说,这将是一个很好的机会。在这种情况下,我会将过滤器功能(循环)某种助手类更容易重用,当你需要从别的地方使用它时,你会感谢你自己。 – nwinkler 2012-03-13 14:54:20

0

一种方法是使PaymentType抽象与一些常用方法。然后,您创建子类,如CreditCardPayment extends PaymentType,这将使您能够执行如下操作:

for(CreditCardPayment payment : payments) 
{ 
    ccpList.add(payment); 
}