假设我有一个包含一些元素的列表,我想选择所有不满足某个条件的人。我在考虑这样的事情:
public void choose(Condition c) {
choose all elements that satisfy c.CheckCondition(elem)
}
然而,我认为它非常不优雅,它迫使用户实现Condition
对象
某个函数将检查元素是否满足条件。
如果它是c ++我将发送一个指向函数的指针作为参数,但它在java中是不可能的。
我想过使用Comparable
对象,但这并不好,因为我必须在我的课堂上实现它而不是从用户那里获取它。
针对这个问题的任何其他优雅想法?
谢谢!
答案 0 :(得分:2)
目前还没有 - Java 7仍然没有闭包(C中的“函数指针”)。它可能来自Java 8.与此同时,我们仍然坚持将谓词编写为类......
但您可能对Guava图书馆感兴趣。它由Google开发,并且已经提供了过滤,映射或转换集合元素的类。 http://code.google.com/p/guava-libraries/
答案 1 :(得分:0)
我认为你提出的建议相当优雅,特别是与泛型和匿名课程相结合时:
set.choose(new Condition<Elem>() {
boolean checkCondition(Elem elem) {
...
}
});