2016-06-16 41 views
4

工作,我如何轉換這種說法從經典的Java到Android流()方法不會在Android的

Collection<Integer> p1; 
int sum = p1.stream().mapToInt(Integer::intValue).sum(); 

我整合的Java 8和lambda我的Android應用程序,但它仍然無法正常工作。在android中找不到stream()方法。

你能幫我嗎?

+0

沒有,我不問使用java 8的可能性,因爲我已經在使用它了:我在android –

+0

中詢問了一個等效的stream()方法所以你想要一個'for'循環? – Tunaki

+0

我想轉換所有的語句,因爲一個stream()方法不可用,mapToInt()和sum()也不可用。 –

回答

6

您可以使用streamsupport庫將後端流API API移植到可用於Android開發的Java 6/7,並支持所有設備。這個庫完全支持Java 8中的原始實現,並使其在單獨的包(前綴java8。)中可用。 Collection接口上添加的默認方法(例如#stream(),#forEach())可以從單獨的工具類中獲得,例如, Iterables或StreamSupport。

+0

它是否有Gradle的Maven回購,還是我們必須使用物理jar文件? –

+2

@Igor Ganapolsky罐子在Maven中心。從Gradle使用它們沒問題。 – Sartorius

0

流API是在最近的Android 7.0 SDK平臺的修訂包括:(API 24):

public interface Collection<E> extends Iterable<E> { 
    // .. redacted 
    default Stream<E> stream() { .. } 
} 

請注意,爲了使用它,你必須設置minSdkVersion至24

+0

你知不知道,用minSdk <24是可能以某種方式運行這樣的api?以傑克編譯器或者某事物爲例。應該有一些方法來支持它,我很自豪) – Beloo

+2

@Beloo我沒有嘗試過自己,但它似乎像steamsupport庫[T.Neidhart提到](http://stackoverflow.com/a/37880098/1233652 )完全符合你的需求。你試過了嗎? –

+3

@Beloo是的,streamsupport應該爲你工作。我還沒有嘗試過與傑克,但我沒有看到任何理由爲什麼它不應該工作。 Android世界中的很多人都使用retrolambda插件,但傑克應該沒問題。 –

相關問題