該場景是我創建的篩選器的不同類型,它根據對象的屬性篩選一些對象的列表。在使用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