Retrolambda 与 RealmList

Retrolambda with RealmList

我正在尝试在 forEach 循环中访问模型 class 的 RealmList。

尝试:1

realmList.forEach(obj -> { System.out.println("value"+obj.getValue())});

尝试:2

realmList.forEach((ModelClass obj) -> { System.out.println("value"+obj.getValue())});

两次尝试都出现错误

java.lang.NoClassDefFoundError:activites.MainActivity$$Lambda

我该如何解决这个错误?

Retrolambda 仅提供 Java 8 中的语法,而不是 API。因此,仅使用 Retrolambda 将无法使用新的日期和时间 API、流 API 等。如果你想在 Android 中使用新的 Java 8 APIs 你必须添加除了 Retrolambda 之外的额外库。 Stream API 的非常好的端口在 https://github.com/aNNiMON/Lightweight-Stream-API

另外:如果你想使用最新的 Java 8 Date API in Android 你可以使用这个端口:http://www.threeten.org/threetenbp/

编辑

我的印象是我之前的回答不是 100% 清楚。您现在的问题是您想要使用 ArrayList.forEach 方法,该方法在 Android SDK 中使用的 Java 7 中不可用。 Android Studio 会显示此类补全,因为它认为您正在使用 Jack 编译器并且这些 API 可用。但是您需要忽略它并使用 Java 8 APIs 端口之一或切换到 Jack 编译器,它允许您使用 Java 8 语法和 APIs 而无需 Retrolambda。

List.forEach(是JDK8中新增的方法

Android API 24(如 Android 7.0)有 JDK8,以下任何东西都没有 JDK8。

因此您需要使用兼容库而不是 JDK8 方法,例如 this one