2017-08-09 284 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

就是這樣,謝謝 –