将额外的(第二个)参数传递给Guava Predicate

时间:2014-09-24 15:15:32

标签: java guava

我有这个Predicate,根据日期过滤我的Task个对象:

Predicate<Task> startDateFiltering = new Predicate<Task>() {
    @Override
    public boolean apply(Task input) {
        return input.getStartDate() != null
                && input.getStartDate().after(date);
    }

};

只要在上下文中可以访问date变量,就可以使用它。但是,我想让它可重用并将其嵌入Task类本身,做这样的事情:

public static final Predicate<Task> startDateFiltering = new Predicate<Task>() {
    @Override
    public boolean apply(Task input) {
        return input.getStartDate() != null
                && input.getStartDate().after(date);
    }

};

每次需要时都以Task.startDateFiltering的形式访问它。但是如何将date参数传递给它?

2 个答案:

答案 0 :(得分:18)

我会创建一个static工厂方法(或者每次都直接创建一个新实例)

public static Predicate<Task> startDateFilteringWithDate(final Date date) {
    return new Predicate<Task>() {
        @Override
        public boolean apply(Task input) {
            return input.getStartDate() != null
                && input.getStartDate().after(date);
        }
    };
}

答案 1 :(得分:4)

将其包装成方法(Factory pattern)。

public static Predicate<Task> startDateFiltering(Date date) {
    return new Predicate<Task>() {
       public boolean apply(Task input) {
             return input.getStartDate() != null
            && input.getStartDate().after(date);
       }
    }
 }