java中的筛选java.util.Collection
我编写了一个util类来过滤java中的筛选java.util.Collection,java,collections,Java,Collections,我编写了一个util类来过滤java.util.Collection中的元素,如下所示: public class Util{ public static <T> void filter(Collection<T> l, Filter<T> filter) { Iterator<T> it= l.iterator(); while(it.hasNext()) { if(!filter.match(it.next())
java.util.Collection
中的元素,如下所示:
public class Util{
public static <T> void filter(Collection<T> l, Filter<T> filter) {
Iterator<T> it= l.iterator();
while(it.hasNext()) {
if(!filter.match(it.next())) {
it.remove();
}
}
}
}
public interface Filter<T> {
public boolean match(T o);
}
公共类Util{
公共静态空隙过滤器(集合l,过滤器过滤器){
迭代器it=l.Iterator();
while(it.hasNext()){
如果(!filter.match(it.next())){
it.remove();
}
}
}
}
公共接口过滤器{
公共布尔匹配;
}
问题:
我认为在
Filter
界面中定义visit(to)
方法会很酷。这样,当存在匹配项时,过滤器实现可以决定对访问对象采取什么操作。是否有必要取决于您想要实现什么。如果您可以使用其他第三方LIB,如Google Collections,则不会。如果计划一次性使用,则可能不会。如果您计划创建不同的过滤器,那么是的,看起来是一个保持模块化和内聚性的好方法
一个建议是,您可能希望返回一个集合,这样,您就可以选择返回一个新的筛选集合,而不是修改原始集合。如果您需要在并发上下文中使用它,这可能很方便
您还可以查看对的回复。看起来不错,但我们无法决定是否“有必要”编写它(好的,您确实编写了它;)
remove()。一些迭代器只是抛出一个不支持的操作异常
。您应该捕获它或将其转换为自定义异常,说明无法筛选此集合
然后您可以将方法签名更改为
public static <T> void filter(Iterable<T> i, Filter<T> filter)
公共静态空隙过滤器(Iterable i,过滤器)
因为迭代器不限于集合。使用此实用程序方法,您可以过滤提供允许删除操作的迭代器的每个“容器”
你认为有必要写这个方法吗
如果您不介意使用第三方库,则不介意
对提供此功能的第三方库的一些建议:
您可能想看看哪个提供了filter
以及在真正的blue函数语言中发现的许多其他高阶函数
例如:
List<Person> adults = filter(people, new F1<Person, Boolean>() {
public Boolean f(Person p) {
return p.getAge() > 18;
}
});
List<Person> adults = filter(having(on(Person.class).getAge(), greaterThan(18)), people);
List成人=过滤器(人物,新F1(){
公共布尔f(个人p){
返回p.getAge()>18;
}
});
另一种选择是使用-一个具有类似目标但比函数Java简洁得多的库。尽管如此,lambdaj并没有涵盖功能性Java那么多的领域
例如:
List<Person> adults = filter(people, new F1<Person, Boolean>() {
public Boolean f(Person p) {
return p.getAge() > 18;
}
});
List<Person> adults = filter(having(on(Person.class).getAge(), greaterThan(18)), people);
List成人=过滤器(有(on(Person.class).getAge(),大于(18)),人);
否。已具有此功能。请参见谓词
实现过滤的位置
关于问题1,已经有很多藏书图书馆。apache common collections和google collections按实例提供过滤功能。您应该允许任何过滤功能