2015-09-18 28 views
3

的Java/Android的最好相當於讓我們來看看這個例子C#代碼:爲C#LINQ

List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 
int numCount = numbers.Where(n => n < 3 || n > 7).Count(); 

我insterested在Java中cloesest等同,顯然而不需要/ foreach循環在集合遍歷寫幻想。

據我所知,在Java中沒有確切的linq equivalnet,但我仍然是Java編程的初學者,那麼有什麼可以爲我推薦的嗎?我實際上正在尋找最簡潔優雅的方式來實現在Java中的相同結果

[增加] 所以,感謝所有的迴應。但是,我需要在Android上使用它,而且看起來我不能。有沒有解決方案?

(對不起它,它的一式兩份)

[添加] 有任何人嘗試過呢? http://sourceforge.net/projects/streamsupport/

+0

@caesay如果你向下滾動的答案,你會發現有關'Java 8流'這將在這裏做的工作 – Sybren

+0

@Sybren:我是其中一個答案。我提出了一個重複的問題。這裏的問題是「我如何根據謂詞過濾數組」,這也是我發佈的鏈接的問題。 – caesay

+0

@是的,答案也在你的鏈接中,但也在我的,所以我不明白你爲什麼不同意我的副本。 – Sybren

回答

3

在Java8:

Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count(); 

針對適用於Android,請lambdaj要求: https://code.google.com/p/lambdaj/它與android兼容 - 雖然語法不同。您必須查看文檔,因爲我從未使用它。你也可以檢查出https://github.com/wagnerandrade/coollection

+0

Lambdaj看起來很有前途,它不像C#linq那麼清晰,但它比沒有更多 – user1209216

+0

我發現Guava Collections + lambda(或方法引用) Android系統。不幸的是,Java 8 stream api不是解決方案,因爲它需要最小的api Android 7. Guava提供了類似的api,但它也適用於任何Android版本。我無法回答我的問題,因爲管理員決定將其標記爲重複 – user1209216

2

Java的8流API結合Lambda表達式將做的工作:

int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 
    long count = Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count(); 
+0

謝謝,我更新了我的問題。我在Android上,所以我輸了? – user1209216

+0

不幸的是,直到它支持Java 8時,它才能在android上工作。 –

1

使用Java8流將工作非常類似:

int numcount = Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count(); 
3

如果你需要的Java 7或更早版本嘗試在谷歌代碼可用lambdaj庫。如果不相同,它會提供類似的功能。