Я не уверен, полностью ли я понимаю, как использовать guava's Predicate<T>
. У меня есть два класса Promotion
и Customer
, и я хочу проверить, какая из рекламных акций применима к клиенту.Правильное использование guava Predicate на двух типах
public Optional<Promotion> getApplicablePromotionToCustomer(final List<Promotion> activePromotions,
final Customer customer) {
return FluentIterable.from(activePromotions).firstMatch(new Predicate<Promotion>() {
@Override
public boolean apply(final Promotion input) {
return input.getCustomerType().equals(customer.getType()) && new DateRangeComparator().overlaps(input.getDateRange(), customer.getDateRange());
}
});
}
Мои вопросы касаются правильного ввода Predicate
. Правильно ли делать Predicate
типа Promotion
или мне следует создать класс обертки с Promotion
и Customer
? Я даже не знаю, как это сказать. Является ли "Predicate
с помощью Customer
и применяет его к объекту Promotion
"? Если я хочу извлечь анонимную реализацию Predicate
в свой собственный класс, мне придется сделать конструктор занять Customer
и даже DateRangeComparator
, если вы хотите сделать это настраиваемым. Является ли это прекрасным или подход совершенно неправильным?
Это выглядит хорошо. Проводили ли вы какое-либо тестирование? Существуют ли какие-либо проблемы с кодом? –