2016-09-08 3 views
-1

У меня есть выражение лямбда, как показано ниже. Я хочу спросить, есть ли какой-либо простой способ или лучшая практика для параметра метода литья?Как использовать параметры лямбда-метода?

 results.forEach(
      (result) -> 
      { 
       ((JSONObject)result).put("test", "test"); 
       ((JSONObject)result).put("time", System.currentTimeMillis()); 
       otherList.add(((JSONObject)result)); 
      } 
    ); 

Когда я пытаюсь изменить тип входа, как

(JSONObject result) -> 

я получаю ниже ошибки;

incompatible types: Consumer<JSONObject> cannot be converted to Consumer<? super Object> 
+0

Как говорится в сообщении, те, типы несовместимы. Почему бы просто не ввести локальную переменную? –

+0

@OliverCharlesworth Сначала я подумал, что (создавая новую локальную переменную), но что, если у меня есть 5-6 входов? Нужно ли мне создавать новую переменную для всех? – hellzone

+0

Эта проблема не уникальна для лямбда - она ​​применима к любому методу. (Тем не менее, если у вас есть лямбда с 5-6 входами, возможно, происходит что-то странное!) –

ответ

0

Как Fabian предложил под комментарии, вы могли бы инициализировать ваш results как List или List<Object>

Что вы можете сделать, вы можете иметь List<JSONObject>

results.forEach(
      (result) -> 
      { 
       result.put("test", "test"); 
       result.put("time", System.currentTimeMillis()); 
       otherList.add(result); 
      } 
Смежные вопросы