I can use retrolambda to enable lambdas with Android API level <24.
So this works
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
This also works
Runnable runLater = () -> Timber.d("Lambdas work!"); runLater.run();
But this one does not
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i); runLaterWithInt.accept(3);
The last one works on Android API Level 24, but on other devices this code causes a crash
Instead of using retrolambda I tried to enable Java 8. First two code examples still work, although butterknife stopped working. https://developer.android.com/preview/j8-jack.html#configuration here
ava.util.function is said to be supported, but I still get a crash when running the third one, this time it is a little different
Not sure if you still need an answer to this question, but others (like myself) might.
As version 3.0, Android Studio natively supports lambda functions and many other Java 8 functions on all API levels, but some (like Functional Interfaces and
java.util.function) are still restricted to APIs 24+.
Until that support is expanded, android-retrostreams provides backport support for most of it. This project is an ‘upgraded port’ of the streamsupport library, which you can also use and has many of the functionalities in android-retrostreams. The streamsupport library supports down to Java 6/7, so you can use it even if you don’t have AS 3.0+ or aren’t targeting Java 8, but you’re probably better off using android-retrostreams in most cases, if you can. You can go through the project’s javadocs to see exactly what’s offered, but highlights that I’ve used are
java in the package names is replaced with
java9, and some of the class and/or method names may have been changed slightly. For example:
java9.util.Comparators (and with slightly different method names and call patterns – but the same functionality).
Answered By – VerumCH
Answer Checked By – Dawn Plyler (Easybugfix Volunteer)