2017-08-09 285 views
1

你好,我有以下代码:如何处理lambda表达式与3个参数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,这就是为什么我问这个问题。

回答

2

假设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表达式。

+0

就是这样,谢谢 –