Как вы назначаете лямбда-переменную в Java 8?
Просто играть с новой лямбда и функциональными возможностями в Java 8, и я не уверен, как это сделать.
Например, действует следующее:
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
map.compute("A", (k, v) -> v == null ? 42 : v + 41));
но следующее дает мне синтаксические ошибки:
BiFunction x = (k, v) -> v == null ? 42 : v + 41;
map.compute("A", x);
Есть идеи?
3 ответа
Вы забыли дженерики на своем BiFunction
:
public static void main(final String[] args) throws Exception {
final Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
final BiFunction<String, Integer, Integer> remapper = (k, v) -> v == null ? 42 : v + 41;
map.compute("A", remapper);
}
Бег:
PS C:\Users\Boris> java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b120)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b62, mixed mode)
Пример передачи лямбда-выражения, содержащего метод
YourClass myObject = new YourClass();
// first parameter, second parameter and return
BiFunction<String, YourClass, String> YourFunction;
YourFunction = (k, v) -> v == null ? "ERROR your class object is null" : defaultHandler("hello",myObject);
public String defaultHandler(String message, YourClass Object)
{
//TODO ...
return "";
}
Как указывает Борис Паук, конкретная проблема, которую вы имеете, - это дженерики. В зависимости от контекста добавление явного блока {} вокруг лямбды поможет добавить ясности и может потребоваться.
С этим вы получите что-то вроде:
BiFunction<String, Integer, Integer> x = (String k, Integer v) -> {v == null ? 42 : v + 41};
Для будущих читателей, которые столкнутся с той же проблемой, было бы очень полезно, если бы вы опубликовали свои синтаксические ошибки, чтобы их можно было проиндексировать.
Эта ссылка имеет несколько дополнительных примеров, которые могут помочь.