2012-03-13 147 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); 
}