与RealmList的Retrolambda

时间:2017-01-13 13:00:51

标签: android realm retrolambda

我正在尝试在forEach循环中访问模型类的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 $ 1

如何解决此错误?

2 个答案:

答案 0 :(得分:2)

List.forEach(是JDK8中添加的方法。

Android API 24(如在Android 7.0中)有JDK8,以下任何内容都没有JDK8。

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

答案 1 :(得分:1)

Retrolambda只提供Java 8的语法,而不是API。因此,仅使用Retrolambda将无法使用新的Date& Time API,Streams API等。如果要在Android中使用新的Java 8 API,除了Retrolambda之外,还必须添加其他库。非常好的Stream API端口位于https://github.com/aNNiMON/Lightweight-Stream-API

此外:如果您想在Android中使用最新的Java 8 Date API,您可以使用此端口:http://www.threeten.org/threetenbp/

修改

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