Java 1.5等同于.Net中的Predicate 方法吗?

具体来说,我正在为Collection.TrueForAll / Exists等寻找类似的干净表示法。

编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习语。

Google Collections库中提供了谓词 。

Functional Java提供了一流的function。 谓词表示为F 。 例如,这是一个程序,它测试数组是否存在全部小写字母的字符串。

 import fj.F; import fj.data.Array; import static fj.data.Array.array; import static fj.function.Strings.matches; public final class List_exists { public static void main(final String[] args) { final Array a = array("Hello", "There", "how", "ARE", "yOU?"); final boolean b = a.exists(matches.f("^[az]*$")); System.out.println(b); // true } } 

据我所知,没有。 但是Apache Commons Collections有这样的东西: Predicate


编辑 :对,如评论中所述,Commons Collections来自仿制前世界,因此Google Collections更新 : Guava )现在似乎是一个明显更好的选择。 值得一提的是,Commons Collections值得一提,因为它是一个众所周知的图书馆,并且也让人们知道为什么不使用它。 🙂

我刚刚在与其主要开发者的这次精彩访谈中阅读了更多关于Google Collections的内容,并想引用一些专门针对“Google Collections vs. Apache Commons Collections”问题的内容:

你的方法有什么独特之处? 它与Apache Commons Collection有何不同?

凯文:“好吧,感谢上帝对于Apache Commons。如果没有像这样的图书馆,我们都会处于糟糕状态。可悲的是,在一个仿制药前世界,特定的项目已停滞不前。他们确实想采用仿制药,但是他们认识到这将涉及一个非常重要和不相容的重写。到目前为止,似乎没有人积极推动这样的努力。在谷歌,我们自2005年春季以来一直在公司范围内使用Java 5。一个集合库未被统一对我们来说是一个交易破坏者,因为我们真的不喜欢收到编译器警告。我还担心Apache集合中的许多地方都不符合他们实现的JDK接口的规范。“

[…]

Jared:“正如凯文所暗示的,我们的库是我所知道的唯一的集合库,在JDK之外,使用Java 5特性构建:generics,枚举,协变返回类型等。在编写Java 5代码时,您需要一个集合库,充分利用这种语言。此外,我们付出了巨大的努力使图书馆完整,健壮,并与JDK集合类保持一致。我们的集合类最初受到限制,但我们在最后两个阶段逐渐改进了它们由于所有库的使用都在Google的源代码控制系统中,我们可以灵活地修改公共接口。像Apache Commons Collection这样的开源项目在初始发布后无法自由改变其行为。一旦Google Collections Library 1.0发布,我们就会失去这种灵活性,我们现在急于收到反馈意见,以便我们能够把事情弄清楚。“