该场景是我创建的筛选器的不同类型,它根据对象的属性筛选一些对象的列表。在使用java流时记录筛选结果按谓词筛选
因此,为此我创建了一个由每个过滤器继承的AbstractObjectFilter类。
AbstractObjectFilter.java
public abstract class AbstractEventFilter
{
protected abstract Predicate<IEvent> isEligible();
public List<IEvent> getFilteredEvents(final List<IEvent> events)
{
return events.stream().filter(isEligible()).collect(Collectors.toList());
}
}
所以现在每一个过滤器扩展该类并覆盖isEligible(),并在该函数返回根据其性质的谓语。
对于如: - MinNumOfPrizesFilter.java
public class MinimumNumOfPrizesFilter extends AbstractEventFilter
{
private int minimumNumOfPrizes;
public MinimumNumOfPrizesFilter(@NonNull int minimumNumOfPrizes)
{
this.minimumNumOfPrizes = minimumNumOfPrizes;
}
@Override
protected Predicate<IEvent> isEligible()
{
return event -> event.getPrizeCount() >= minimumNumOfPrizes;
}
}
同样也有我创造了许多其他的过滤器。有一个applyFilter函数遍历过滤器对象列表,并通过调用getFilteredEvents函数继续应用过滤器。
现在,我怎么能记录每个事件例如命运 - “被MinNumOfPrizesFilter过滤器X1的奖金数过滤X1事件 - 。10,最小奖计数需要 - 20”
这里的lambda表达式的要点是什么?与传统的只让'AbstractEventFilter'直接实现'Predicate'的方法相比,这样子类只需要实现'test'方法,这不是简单的。 –
Holger
顺便说一下,用@ NonNull注释一个'int'变量是毫无意义的,因为无论如何'int'的值永远不可能是'null'。 – Holger