2012-03-13 3 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

実際に支払いタイプは列挙型ではなく文字列にする必要がありますか? – kittylyst

+0

支払いは文字列として決定されます。カートのオブジェクト全体と他のものは、WSDLサービス要求の複雑なデータ型の一部として存在します。 –

答えて

1

それはあなたがより良いことで何を意味するかに依存します。

この情報を格納するHashMapを維持できます。これはループの使用を避けますが、使用方法に応じて複雑さを増し、全体的に遅くなるデータ構造を維持する必要があることを意味します。

これ以上の情報がなければ、私はループを使用するための最も単純な/最短の方法を採用します。

+0

実際、カートオブジェクトはWSDLサービスリクエストの複雑なタイプです。私はリストを整理し、提供されたルールに基づいて適格なアイテムを特定します。そのようなルールの1つは、「支払いゲートウェイクレジットカードを持つすべての商品」です。私はカートに適用するより多くのルールを持っています:)しかし、データ構造は定義しました。 –

+0

クエリの種類ごとに、結果をキャッシュするデータ構造を追加する必要があります。ブルートフォースを使用すると、より簡単になりますが、おそらく遅くなりますが、おそらくそれ以上の速さです。ミリ秒単位で100,000個のアイテムをループすることができるため、パフォーマンスが重要であってもループすることができます。 –

0

興味のあるオブジェクトを見つけるために各クラスにメソッドを追加します。メソッドList<Item> findItemsByPaymentType(PaymentType paymentType)をそれぞれGroupCartに設定します。 Cartにあるグループは、グループインスタンスごとにGroupクラスのクラスを呼び出し、1つのグループ結果をすべて1つの結合リストにまとめて収集します。

これは、ループを実装する必要があることを意味しますが、各クラスできれいに行われます。テストが簡単で、再利用が簡単です。

+0

カートのオブジェクトは私のサービス要求の一部であり、自動生成されます:( –

+0

実際のオブジェクト指向設計にとっては素晴らしい機会でしたが、この場合はフィルタ機能(ループ)をいくつかの種類のヘルパークラスを使用して簡単に再利用できます。他の場所から使用する必要がある瞬間に感謝します。 – nwinkler

0

1つの方法は、いくつかの一般的な方法でPaymentType抽象化を行うことです。次に、CreditCardPayment extends PaymentTypeのようなサブクラスを作成すると、次のようなことができます。

for(CreditCardPayment payment : payments) 
{ 
    ccpList.add(payment); 
} 
関連する問題