我可以自己寫一個幫助器類,當給定一個函子時,可以這樣做,但是我想知道是否有更好的方法,或者標準庫中是否有東西(似乎應該有)。最簡潔的方式來查找匹配java.util.List中的某些條件的對象?
我在StackOverflow上找到的答案都是爲C#,它不幫助我。
謝謝
我可以自己寫一個幫助器類,當給定一個函子時,可以這樣做,但是我想知道是否有更好的方法,或者標準庫中是否有東西(似乎應該有)。最簡潔的方式來查找匹配java.util.List中的某些條件的對象?
我在StackOverflow上找到的答案都是爲C#,它不幫助我。
謝謝
不 - 沒有。 Apache commons-collections
對此類事物具有謂詞,但由此產生的代碼(使用匿名內部類)通常很難看,並且很難調試。
只需使用一個基本for循環,直到他們帶來closures到語言
有JXPath。
您可以試試Quaere。我沒有使用它,但它看起來很有趣。
Google Collection Library提供了這種輔助方法,比commons-collections更乾淨一點。
「清潔」是Google收集庫具有泛型意識的結果,與公共收藏不同。 – 2009-03-22 19:16:46
通過使用lambdaj庫,例如,你可以找到頂級的聲譽用戶,因爲它遵循:
List<User> topUsers =
select(users, having(on(User.class).getReputation(), greaterThan(20000)));
它有一定的優勢尊重Quaere庫,因爲它不使用任何魔法字符串,它是完全類型安全,並在我看來它提供了一個更可讀的DSL。
Querydsl通過它的集合模塊提供了這個功能。由於我是該模塊的維護者,所以我有偏見,但我相信在給定Java 6的限制條件下,這是一個選項。
使用Java 7,將會有閉包使得通過閉包過濾,這使得外部庫的使用變得不那麼必要。
好吧,我一直聽到有關這一點的矛盾信息:在Java 7中是否關閉?我看到一些網頁說他們沒有做出裁員,有些人說他們做了。 – jasonmp85 2010-05-31 11:15:49
我認爲目前的答案是,是的,他們可能會做到。 Google Neal Gafter瞭解更多信息! – 2010-05-31 12:48:36