我可以为自己编写一个辅助类,在给定函子时执行此操作,但我想知道是否有更好的方法,或者标准库中是否已经存在某些东西(似乎应该有)。
我在 StackOverflow 上找到的答案都是针对 C# 的,这对我没有帮助。
谢谢
不——没有。Apachecommons-collections
对这类事情有谓词,但生成的代码(使用匿名内部类)通常很难看,而且调试起来很痛苦。
只需使用基本的 for 循环,直到它们将闭包带入语言
例如,通过使用lambdaj库,您可以找到声誉最高的用户,如下所示:
List<User> topUsers =
select(users, having(on(User.class).getReputation(), greaterThan(20000)));
它在 Quaere 库方面具有一些优势,因为它不使用任何魔术字符串,它是完全类型安全的,并且在我看来它提供了更易读的 DSL。
Querydsl也通过其 Collections 模块提供此功能。因为我是模块的维护者,所以我有偏见,但我相信鉴于 Java 6 的限制,这是一个选项。
在 Java 7 中,会有闭包可以通过闭包进行过滤,从而减少使用外部库的必要性。
有JXPath。
你可以试试Quaere。我没有使用它,但它看起来很有趣。
Google Collection Library提供了这种帮助方法,比 commons-collections 更干净一些。