当前位置: 首页 > 知识库问答 >
问题:

如何在Android6.0下使用Java8流API

栾景胜
2023-03-14
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.radinator.myproject"
        minSdkVersion 24
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    testCompile 'junit:junit:4.12'
}
import java.util.stream.*;
public class MainActivity extens Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainactivity);
    }

    void foo(){
        List<String> myList = Arrays.asList("one", "two", "three", "four", "five", "six");
        myList.stream()
            .filter(s -> s.length() > 0)
            .collect(Collectors.toList())
    }

}

我该怎么解决这个烂摊子?

提前致谢

共有1个答案

闻人栋
2023-03-14

更新2017-04-04

杰克被弃用了,谷歌正在用一种叫做desugar的东西来取代它。它现在可以在Android Studio2.4预览版4和更高版本中使用。

Java8语言/库特性的可用性仍然取决于设备API级别和Android Studio版本,所以要确保仔细检查哪些可以使用,哪些不可以使用。

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

要启用Jack,请编辑build.gradle,如下所示

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

更多信息可以在这里找到

但是,我想补充一点,到目前为止,我对jack的体验相当糟糕,特别是在调试时。我建议使用streamsupport和retrolambda来代替 直到Jack的妹妹Jill被释放

 类似资料:
  • 我正在寻找第一次到流API的Java8。我尝试创建一个筛选器来从映射中删除元素。

  • 替代的解决方法可以是将有限的函数转换为对检查的异常更友好的普通旧foreach循环。 但天真的方法是失败的: 更新 回答这个问题的一个技巧以前在Why does stream not implementing iterable 上发布过?作为旁侧答案并不能真正回答问题本身。我认为这不足以将这个问题定性为那个问题的重复,因为他们问的是不同的问题。

  • 问题内容: 我正在使用Java lambda对列表进行排序。 如何以相反的方式对其进行排序? 我看到了这篇文章,但是我想使用java 8 lambda。 这是我的代码(我用* -1)作为破解 问题答案: 您可以调整在Java中如何以降序对ArrayList 排序的方法中链接的解决方案通过将其包装在lambda中: 请注意, f2 是的第一个参数,而不是第二个,因此结果将相反。

  • 我有一个,另一个作为参数 我想创建一个按类型返回的方法 通常我会写 用java stream写的最佳做法是什么?

  • 我有一个hashmap,看起来像这样: 我的ImageRecipeMap对象如下所示: 我想获取所有ImageID列表,并使用Java8流创建一个总的ImageID列表。到目前为止,这就是我所拥有的,但我的collect上似乎有一个编译错误:

  • 我希望使用Java8流创建一个与以下方法等效的方法,但无法做到这一点。有人能带我来吗?