Articles of lambda

Android N中的Java 8 Stream API

根据谷歌的介绍 ,从Android N开始,Android API应该支持Java流。 但是,使用Android N预览SDK,我无法在我的项目中使用任何Stream API(使用Android N配置为最小,目标和构建SDK版本)。 似乎缺少java.util.stream包,就像我尝试过的所有集合实现的stream()方法一样。 SDK的当前预览版中是否还包含必要的类?

Kotlin:安全的lambdas(没有内存泄漏)?

在阅读了关于内存泄漏的这篇文章之后,我想知道在Kotlin Android项目中使用lambdas是否安全。 确实,lambda语法让我更容易编程,但内存泄漏怎么样? 作为问题的一个例子,我从我的一个项目中获取了一段代码,在那里我构建了一个AlertDialog。 此代码位于项目的MainActivity类中。 fun deleteItemOnConfirmation(id: Long) : Unit { val item = explorerAdapter.getItemAt(id.toInt()) val stringId = if (item.isDirectory) R.string.about_to_delete_folder else R.string.about_to_delete_file val dialog = AlertDialog.Builder(this). setMessage(String.format(getString(stringId), item.name)).setPositiveButton( R.string.ok, {dialog: DialogInterface, id: Int -> val success = if (item.isDirectory) ExplorerFileManager.deleteFolderRecursively(item.name) else ExplorerFileManager.deleteFile(item.name) if (success) { explorerAdapter.deleteItem(item) explorerRecyclerView.invalidate() } else Toast.makeText(this@MainActivity, R.string.file_deletion_error, Toast.LENGTH_SHORT).show() }).setNegativeButton( R.string.cancel, […]

Android Studio:lambda不起作用

尝试使用lambdaexpression式时,我遇到了一些Gradle构建错误: 错误:(41,100)错误:-source 1.7不支持lambdaexpression式(使用-source 8或更高版本来启用lambdaexpression式) 错误:任务’:app:compileDebugJava’的执行失败。 编译失败; 请参阅编译器错误输出以获取详细信 快速搜索帮助我理解lambdaexpression式仅支持JDK 1.8,显然我没有使用它。 我的问题是我的计算机上安装了JDK 1.8(我正在使用Yosemite),在模块设置→SDK位置→JDK位置它说: 但是在设置模块→应用程序→源/目标兼容性中,没有诸如“1.8”之类的选项,只有Java 1.6或1.7的选项。 我知道我可以管理没有匿名function,但我仍然想解决这个问题。

Java 8是否适用于Android api 24及更高版本或者您可以在较低的api中使用?

在基于此页面的android中, Java 8语言function仅在api 24及以上版本中运行,或者你可以在api低于api 24使用 ,如果你能使用这个function,那么android中最小的api版本支持这些function

当我使用lambda遍历String数组时NoClassDefFoundError

当我使用lambda遍历String数组时,我得到了跟随错误。 java.lang.NoClassDefFoundError: com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity$$Lambda$1 at com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity.initView(CreateOrUpdateAlarmActivity.java:143) at com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity.onCreate(CreateOrUpdateAlarmActivity.java:73) 这是我的代码。我知道传统方式遍历String数组是正常的,但为什么在使用lambda时会发生这种情况。 String[] days = dayOfWeek.split(“,”); Arrays.asList(days).forEach(day->{ int index = Integer.valueOf(day) -1; checkBoxList.get(index).setChecked(true); });//where happens NoClassDefFoundError 我的build.gradle文件 android { compileSdkVersion 25 buildToolsVersion “25.0.2” defaultConfig { applicationId “com.twsz.app.ivybox” minSdkVersion 14 targetSdkVersion 25 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” vectorDrawables.useSupportLibrary = true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dataBinding […]

在Kotlin中将接口作为parameter passing

我想传递一个接口作为参数,如下所示: class Test { fun main() { test({}) // how can I pass here? } fun test(handler: Handler) { // do something } interface Handler { fun onCompleted() } } 在Java中,我可以使用像test(new Handler() { ………. })这样的匿名函数test(new Handler() { ………. }) ,但我不能在Kotlin中这样做。 有人知道怎么做吗?

有没有办法在24以下的Android API上使用Java 8function接口?

我可以使用retrolambda来启用Android API级别<24的lambdas。 这样可行 myButton.setOnClickListener(view -> Timber.d(“Lambdas work!”)); 这也有效 Runnable runLater = () -> Timber.d(“Lambdas work!”); runLater.run(); 但是这个没有 Consumer runLaterWithInt = (Integer i) -> Timber.d(“i = ” + i); runLaterWithInt.accept(3); 最后一个适用于Android API Level 24,但在其他设备上,此代码会导致崩溃 java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1 我试图启用Java 8.而不是使用retrolambda。前两个代码示例仍然有效,尽管butterknife停止工作。 https://developer.android.com/preview/j8-jack.html#configuration这里据说支持ava.util.function ,但是在运行第三个时我仍然会崩溃,这次它有点不同 java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1

使用jack时,Lambdaexpression式在Android中的IncompatibleClassChangeError崩溃

我在我的Android项目中使用Java 8。 我已经设置了Jack(在Android应用程序模块中)和Retrolambda(在其他模块中)。 我遇到的问题是,当我尝试使用类variables(并且我可以在任何模块中重现它)时,我的Lambdaexpression式在一个特定场景中崩溃,在所有其他情况下,它按预期工作。 也许这是标准的Java行为,但到目前为止我找不到任何解释。 有谁知道问题在哪里? 我的class级和崩溃如下: public class LambdaBugTest { private final String parentClassVariableString = “parentClassVariableString”; public void testLambdas() { // ———– THESE WORK OK ————– final Functional simpleLambdaWorks = text -> System.out.print(text); final Functional methodReferenceWorks = System.out::print; final Functional interfaceWithClassParamWorks = new Functional() { @Override public void doSomething(String text) { System.out.print(text + ” […]

Android Jack:来自jar文件的Lambda需要在类路径上编译接口,未知接口是java.util.function.Consumer

在Android studio 2.2上获取此function。 有没有人有解决方法? 我的应用构建文件是: apply plugin: ‘com.android.application’ android { compileSdkVersion 24 buildToolsVersion “24.0.2” defaultConfig { applicationId “acme.cb2” minSdkVersion 18 targetSdkVersion 24 versionCode 1 versionName “1.0” jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } } dependencies { compile fileTree(dir: […]

AndroidStudio 4+上的语言级别Java 8(Retrolambda)?

因此,有人将用于Java 8的Lambdas反向回Java 6和7.显然它也适用于Android。 该项目名为Retrolambda 。 我想在AndroidStudio上玩这个,但是在最近的版本中它们似乎已经删除了将Java 8设置为语言级别的能力(因此我在使用Lambdas时没有遇到编译错误)。 有没有人知道这方面的方法? 我想这与AndroidStudio是经过修改的IntelliJ这一事实有关。 任何帮助,将不胜感激。