代码之家  ›  专栏  ›  技术社区  ›  user3748908

正确使用两种类型的番石榴谓词

  •  0
  • user3748908  · 技术社区  · 9 年前

    我不确定我是否完全理解番石榴的味道 Predicate<T> 应使用。我有两节课 Promotion Customer ,我想检查哪一项促销适用于客户。

    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 .做正确吗 谓语 类型的 晋升 或者我应该用 晋升 顾客 ? 我甚至不知道该怎么说。我是否在使用“ 谓语 用一个 顾客 并将其应用于 晋升 "? 如果我想提取 谓语 对于它自己的类,我必须让构造函数接受 顾客 ,甚至 DateRangeComparator 如果想让它可定制。这种做法是正确的还是完全错误的?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Alexis C.    9 年前

    做Promotion类型的谓词是正确的还是我应该构建一个 包装类与促销和客户?

    是的,这是正确的。要实现的过滤函数的形式如下 f(x) = y 哪里 y 属于 {false, true} .

    这里的类型 x 是要应用函数的元素的类型(因此 Predicate ). 由于您筛选了 List<Promotion> 谓词的类型将是 Predicate<Promotion> 。用于测试元素的逻辑(使用 Customer 以及 DateRangeComparator 是函数本身,但输入类型是 Promotion 那里

    我是否对客户使用“谓词”并将其应用于 促销”?

    每个人都有自己的措辞,只要你清楚,我认为这并不重要。但是的,您将谓词应用于 晋升 .

    如果我想提取Predicate的匿名实现 我必须让构造函数接受Customer,甚至 一个DateRangeComparator,如果要使其可定制。这样好吗 还是方法完全错误?

    是的,这样做没有错。我唯一要记住的是,你应该尽可能实现一个无状态谓词,即一个不保留过滤内容的谓词,这样每个项目都可以独立处理。当您开始进行并行计算时,这非常有用,因为必须测试的每个对象都可以将谓词用作独立的“框”。