java - 如何在 Java8 中处理带有 3 个参数的 lambda 表达式

标签 java android lambda

您好,我有以下代码:

 view.setOnLongClickListener((viewL) -> {
        final CharSequence[] optionsDialog = {"Edit", "Delete"};
        ((MainActivity) context).myDialog.setSingleChoiceItems(optionsDialog, 0,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        if(i==0){
                            final Intent myIntent = new Intent (context, MainInputActivity.class);
                            myIntent.putExtra("request", 8);
                            myIntent.putExtra("oldTask", mySubTask.getSubTaskText());
                            myIntent.putExtra("taskCode", mySubTask.getSubtaskCode());
                            ((MainActivity) context).startActivityForResult(myIntent, 8);
                            dialogInterface.dismiss();
                        }
                        if(i==1){
                            realm.executeTransaction((realm) -> mySubTask.deleteSubtask());
                            realm.refresh();
                            notifyDataSetChanged();
                            ((MainActivity) context).updateWidgets();
                            dialogInterface.dismiss();
                        }
                    }
                });

所以这里我有一个 SAM 表达式,在里面我也想将 ((MainActivity) context).myDialog.setSingleChoiceItems 写成 lambda。问题是 setSingleChoiceItems 有 3 个参数,我不知道如何将代码 fragment 转换为 lambda。有可能吗?根据我的 IDE,这就是我问这个问题的原因。

最佳答案

假设 DialogInterface.OnClickListener 是一个功能接口(interface)(即只有一个抽象方法):

view.setOnLongClickListener((viewL) -> {
    final CharSequence[] optionsDialog = {"Edit", "Delete"};
    ((MainActivity) context).myDialog.setSingleChoiceItems(optionsDialog, 0,
            (DialogInterface dialogInterface, int i) -> {
                if(i==0){
                    final Intent myIntent = new Intent (context, MainInputActivity.class);
                    myIntent.putExtra("request", 8);
                    myIntent.putExtra("oldTask", mySubTask.getSubTaskText());
                    myIntent.putExtra("taskCode", mySubTask.getSubtaskCode());
                    ((MainActivity) context).startActivityForResult(myIntent, 8);
                    dialogInterface.dismiss();
                }
                if(i==1){
                    realm.executeTransaction((realm) -> mySubTask.deleteSubtask());
                    realm.refresh();
                    notifyDataSetChanged();
                    ((MainActivity) context).updateWidgets();
                    dialogInterface.dismiss();
                }     
            });
        });

请注意,只有 setSingleChoiceItems 的最后一个参数被转换为 lambda 表达式。

关于java - 如何在 Java8 中处理带有 3 个参数的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585184/

相关文章:

java - Selenium:如何获取包含所有div标签的隐藏元素的值

c++ - 如何返回 lambda 对象?

lambda - Java 8 currying 函数,无法确定 int[] 返回类型

java - 等距图 block 生成

java - SWT/JFace 等同于 JComponent.setDefaultLocale()?

java - Apache Shiro JdbcRealm 与 JavaConfig 和 Spring Boot

android - 菜单项在操作栏中移动

java - 如何使用 Java 将 json 数组转换为 CSV 文件

java - 如何在不重复的情况下通过 A 类将 Java 中的对象从 B 类传递到 C 类

c# - 何时使用或不使用 Lambda 表达式