android-retrostreams

Introduction: Backport of Java 9 java.util.stream API for Android Studio 3.0 desugar toolchain, forked from https://sourceforge.net/projects/streamsupport
More: Author   ReportBugs   OfficialWebsite   
Tags:

Maven Central javadoc.io

android-retrostreams is a fork of the streamsupport library targeted at Android developers who want to take advantage of Android Studio 3.x D8 / desugar toolchain's capability to use interface default & static methods across Jar file boundaries.

Utilizing this feature of desugar, the streamsupport API can be even more aligned with the original Java 8 / 9 API exposed in the java.util.function and java.util.stream packages. That allows for Android app's code to be much more in accordance with the standard Java 8 / 9 usage than it is now possible with the original streamsupport API (which is bound by the restrictions of supporting Java 6).

With respect to static / default interface methods the android-retrostreams public API should now be identical to the Java 9 API wherever this is possible (i.e. for all interfaces that have first been introduced in Java 8).

Supplemental helper classes, public static methods and so on that served as a replacement for the default / static interfaces methods in the original streamsupport API are now mostly gone. E.g., no j8.u.s.RefStreams class anymore - all these methods are now in the j9.u.s.Stream interface.

The retrostreams API lives in the packages java9.util.* and java9.lang respectively. So, it's not possible to simply import the java.util.stream package in your code - you'd rather have to use java9.util.stream instead. While that is fine as long as you have full control over your source code there is the other common scenario of using a binary 3rd party dependency that has been compiled against the standard Java 8 java.util.stream API. In the latter case bytecode rewriting via ProGuard might be an option. ProGuard supports most Java 8 language features and the latest release can also replace the standard Java 8 stream API by the streamsupport backport (cf. the Proguard documentation, especially the section titled "Java 8 stream API support"), i.e., in this case, switching to the older streamsupport backport instead of using android-retrostreams might be the more promising approach.

The online Javadoc gives a picture of the API changes.

The current stable release of retrostreams is android-retrostreams-1.7.4.

Please give feedback here if you experience any problems.

build.gradle:

dependencies {
    implementation 'net.sourceforge.streamsupport:android-retrostreams:1.7.4'
}

All-in-One JAR:

Contains android-retrostreams core + retroatomic + retroflow + retrofuture

dependencies {
    implementation 'net.sourceforge.streamsupport:android-retrostreams_all:1.7.4'
}

Example usage

import java.util.List;
import java9.util.stream.Stream;
import java9.util.stream.StreamSupport;
import static java9.util.stream.Collectors.toList;

List<Integer> list = Stream.of(1, 2, 3, 4).collect(toList());

List<Integer> incremented = StreamSupport.stream(list)
        .map(i -> i + 1)
        .collect(toList());

Sibling projects

You might also have a use for one of retrostreams' sibling projects:

LICENSE

GNU General Public License, version 2, with the Classpath Exception (and CC0 1.0 for JSR-166 derived code)

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools