Фильтрация коллекций в Java - PullRequest
1 голос
/ 13 марта 2012

Я пытаюсь отфильтровать указанную ниже корзину в зависимости от способа оплаты. В корзине есть список групп, в котором есть список товаров, а в товарах есть список способов оплаты.

Теперь я хочу, чтобы все товары с методом оплаты предлагались в качестве кредитной карты. Есть ли лучший способ отфильтровать его, чем проходить через вложенные циклы.

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

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Это зависит от того, что вы подразумеваете под лучшим.

Вы можете сохранить HashMap, в котором хранится эта информация.Это позволяет избежать использования циклов, но означает, что вы должны поддерживать структуру данных, которая добавляет сложность и может быть медленнее в целом, в зависимости от того, как вы ее используете.

Без дополнительной информации я бы выбрал самый простой / кратчайший подход, который заключается виспользуйте петли.

0 голосов
/ 13 марта 2012

Один из подходов - сделать PaymentType абстрактным с помощью некоторых распространенных методов.Затем вы создаете подклассы, такие как CreditCardPayment extends PaymentType, которые позволят вам сделать что-то вроде следующего:

for(CreditCardPayment payment : payments)  
{  
    ccpList.add(payment);  
}  
0 голосов
/ 13 марта 2012

Я бы добавил методы к каждому классу, чтобы найти интересующие вас объекты, например, метод List<Item> findItemsByPaymentType(PaymentType paymentType) для каждого Group и Cart.Затем значение в Cart будет вызывать значение в классе Group для каждого из его экземпляров группы, а затем собрать все результаты одной группы в один объединенный список.

Это все равно будет означать, что у вас естьреализовать циклы, но это было бы сделано красиво и чисто в каждом классе.Легче тестировать и легче использовать повторно.

...