我正在进行一项课程作业,我有一个集合,它将被过滤掉。例如,作为接口的过滤器类是一个接收T元素的方法(匹配)。
在我的FilterCollection类中:
sudo ./nexus run
从那里我必须覆盖方法,例如add,addall,contains,remove等。
使用add()方法
public class FilteredCollection<T> extends AbstractCollectionDecorator<T> {
Collection<T> filterCollection;
Filter<T> currentFilter;
private FilteredCollection(Collection<T> coll, Filter<T> filter) {
super(coll);
this.filterCollection = coll;
this.currentFilter = filter;
}
public static <T> FilteredCollection<T> decorate(Collection<T> coll, Filter<T> filter) {
return new FilteredCollection<T>(coll, filter);
}
但是,我需要查看对象是否与过滤器中的内容匹配,如果匹配,请不要添加它,如果没有,请添加它。什么是正确的方法?
答案 0 :(得分:1)
您需要检查对象是否为currentFilter.matches
。如果是,则添加它。如果您成功添加了对象,请返回true
。否则返回false
。
@Override
public boolean add(T object)
{
if (currentFilter.matches(object)) {
return filterCollection.add(object);
}
return false;
}
答案 1 :(得分:0)
由于Filter
是一个接口,因此您需要为其提供一个实现。例如:
public class MyFilter<T> implements Filter<T> {
boolean matches(T element) {
if (something) {
return true;
} else {
return false;
}
}
}
然后在您的FilteredCollection.add()
方法中,您可以执行以下操作:
@Override
public boolean add(T object) {
if (currentFilter.matches(object)) {
// it matches: add it
} else {
// it doesn't match: do something else
}
}