无法解析方法流()

时间:2016-08-20 07:37:43

标签: android-studio java-8

我正在使用

java version 1.8._101

Android studio 2.1.3

Gradle version 2.14.1

minSdkVersion 15

targetSdkVersion 23

buildToolsVersion '23.0.3'

尝试使用arrayList表达式过滤java 8 lambda,如

ArrayList<Object> listObject = ......();
listObject.stream();

但它给了我cannot resolve method stream()

我已经提到了this

1 个答案:

答案 0 :(得分:2)

2018更新:不再支持jack。当前的Java 8支持howto可用于此:https://developer.android.com/studio/write/java8-support.html - 特别有用的是显示Java8的哪些部分可用于哪个API级别的表。

以下信息已被弃用

build.gradle的关键部分:

android {
  compileSdkVersion 24
  buildToolsVersion "24.0.1"
  ...
  defaultConfig {
    minSdkVersion 24
    targetSdkVersion 24
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

}

使用Stream apis时出现错误&#34;呼叫需要API Level 24&#34;。您可以将其隐藏在@TargetApi(24)后面,但随后需要针对较低API级别的替代实现。要无限制地使用,minSdkVersion必须达到24

更新build.gradle后,请确保在外部库下的项目视图中,&#34; Android API 24平台&#34;出现。如果没有,请执行工具 - &gt; Android-&gt;使用Gradle文件同步项目

然后能够通过以下测试

@Test
public void testStream() throws Exception {
    assertThat(Arrays.asList(1, 3, 4).stream().reduce(0, (i, j) -> i + j), is(8));
}