web-dev-qa-db-ja.com

Java AP​​I <24でAndroid 8 Stream APIを使用できますか?

私はこれを読みました post here。ただし、minSdkVersion <24では、次のようなJava 8 Stream API機能を含むコードを実行できません。

List<Car> newCars = cars.stream()
                        .filter(s -> s.getColor().equals("red"))
                        .collect(Collectors.toList());

エラーメッセージのため、これは実行されません。

呼び出しには、APIレベル24(現在の最小値は15)が必要です:Java.util.Collection#stream

だから誰かが解決策を知っていますか?

76
unlimited101

APIレベルが24未満のJava8ストリームは使用できません。

ただし、ストリーム機能の一部をバックポートするライブラリがいくつかあります

https://github.com/aNNiMON/Lightweight-Stream-API

https://github.com/konmik/solid

https://sourceforge.net/projects/streamsupport/ (コメントで@sartoriusが言及)

[k3b 2019-05-23更新]

https://github.com/retrostreams/Android-retrostreams はAndroid St​​udio 3.x D8を活用するstreamsupportからのスピンオフであり、インターフェースのデフォルトを使用するツールチェーンの機能とJarファイルの境界を越えた静的メソッド。 CompletableFutureなど、他のAndroid-retroXXXへのリンクもあります。

50
Robert Estivill

DexGuard のリリース8.2以降、Java 8ストリームAPIをAndroidデバイス<APIレベル24でも使用できるようになりました。 streamsupport ライブラリを含める必要があり、DexGuardはすべてのJava 8ストリームAPI呼び出しを提供されたライブラリに変換します。追加の処理は不要で、開発者は提供されたJava 8ストリームAPIを使用して簡単にコーディングできます。依存関係も自動的に変換されるため、Java 8機能を備えたライブラリをAndroid開発にも使用できます。

この機能は、近い将来ProGuardにも含まれますので、ご期待ください。

編集:ベータ版が既に存在するProguard 6.1.0は、Java 8ストリームおよび時間APIのバックポートをサポートしています。

10
T. Neidhart