簡體   English   中英

如何在Java8中使用3個參數處理Lambda表達式

[英]How to handle lambda expression with 3 parameters in Java8

您好,我有以下代碼:

 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個參數,我不知道應該如何將代碼段轉換為lambda。 可能嗎? 根據我的IDE,這就是為什么我問這個問題。

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

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表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM