首先我们可以让一个类继承Predicate接口:
public interface Select<E> extends Predicate<E>,Serializable{
Collection<E> select(Collection<E> var1);
boolean apply(E var1);
}
然后我们可以用抽象类实现Select 接口:
public abstract class AbstractSelect<E> impletements Select<E>{
public abstract boolean apply(E var1);
public Collection<E> select(Collection<E> items) {
Collection<E> returnCollection = Lists.newLinkedList();
Iterator var3 = items.iterator();
while(var3.hasNext()) (
E item = var3 .next( );
if (this.apply(item)) {
returnCollection.add(item);
return returnCollection;
}
}
}
然后继承我们的抽象类,实现我们真正的业务逻辑:
public class TicketPredicate extends AbstractSelect<Facility> (
@Override
public boolean apply(Ticket ticket) {
if (ticketValidationPass(ticket)) {
return true;
}else {
return isTicketOutDated(ticket);
}
}
service method:
public class Service{
public <E extends IdentifiedBy<?>> Collection<E> select(Collection<E> c, Select<E> specialSelect) {
return specialSelect.select(c);
}
}
具体用法:
public class TestSelect {
private Collection<Ticket> c;
private TicketPredicate tp;
public TestSelect(){};
public TestSelect(Collection<Ticket> collection, select tp){
this.c = collection;
this.tp = tp;
}
//调用select方法实现对集合c 的预测以及筛选
service.select(c,tp);
}