AndroidStudio 3.0:Java 8流无法编译(调用需要API级别24)

时间:2017-10-31 19:00:09

标签: android-studio-3.0

Java 8,我安装了新的Android Studio 3.0。

添加代码:

 List<String> myList =   Arrays.asList("a1", "a2", "b1", "c2", "c1");

        myList
                .stream()
                .filter(s -> s.startsWith("c"))
                .map(String::toUpperCase)
                .sorted()
                .forEach(System.out::println);

但我收到编译错误:

Call requires API level 24 (current min is 15) java.util.stream.Collection

2 个答案:

答案 0 :(得分:7)

虽然Android Studio 3.0中支持Java 1.8(lambdas,方法引用,默认接口方法),但并非所有Android API都支持1.8。特别是,在API 24之前不支持java.util.stream

请参阅开发人员文档:https://developer.android.com/studio/write/java8-support.html#supported_features

使用java.util.stream来移植Java 1.8库的好库是StreamSupport:https://github.com/streamsupport/streamsupport

答案 1 :(得分:5)

要在不要求最低API级别24的情况下使用Streams和其他Java 8 API,您需要执行以下操作:

  • 将Android Gradle插件升级到4.0.0或更高版本

    classpath 'com.android.tools.build:gradle:4.0.0
    
  • 然后将此依赖项添加到您的build.gradle文件中:

    dependencies { 
    
       coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.6'
    
       ....
    }
    
  • 最后将其添加到您的build.gradle文件中:

    compileOptions {
    
        // Flag to enable support for new language APIs
        coreLibraryDesugaringEnabled true
    
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
    

享受Java 8 Streams和Time APIs:)