4

我可以为自己编写一个辅助类,在给定函子时执行此操作,但我想知道是否有更好的方法,或者标准库中是否已经存在某些东西(似乎应该有)。

我在 StackOverflow 上找到的答案都是针对 C# 的,这对我没有帮助。

谢谢

4

6 回答 6

5

不——没有。Apachecommons-collections对这类事情有谓词,但生成的代码(使用匿名内部类)通常很难看,而且调试起来很痛苦。

只需使用基本的 for 循环,直到它们将闭包带入语言

于 2008-10-22T15:34:32.350 回答
3

例如,通过使用lambdaj库,您可以找到声誉最高的用户,如下所示:

List<User> topUsers = 
    select(users, having(on(User.class).getReputation(), greaterThan(20000)));

它在 Quaere 库方面具有一些优势,因为它不使用任何魔术字符串,它是完全类型安全的,并且在我看来它提供了更易读的 DSL。

于 2010-01-14T10:50:18.963 回答
3

Querydsl也通过其 Collections 模块提供此功能。因为我是模块的维护者,所以我有偏见,但我相信鉴于 Java 6 的限制,这是一个选项。

在 Java 7 中,会有闭包可以通过闭包进行过滤,从而减少使用外部库的必要性。

于 2010-05-15T17:11:46.317 回答
2

JXPath

于 2008-10-22T17:53:48.043 回答
1

你可以试试Quaere。我没有使用它,但它看起来很有趣。

于 2008-10-22T18:20:55.337 回答
1

Google Collection Library提供了这种帮助方法,比 commons-collections 更干净一些。

于 2008-10-23T00:01:27.443 回答