只是在Java 8中玩新的lambda和功能特性,我不知道该怎么做。
例如,以下内容是有效的:
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);
有什么想法吗?
您忘记了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:UsersBoris> 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)
正如Boris The Spider指出的那样,您遇到的具体问题是泛型。根据上下文,在 lambda 周围添加显式 {} 块将有助于提高清晰度,并且可能是必需的。
这样,你会得到这样的东西:
BiFunction<String, Integer, Integer> x = (String k, Integer v) -> {v == null ? 42 : v + 41};
如果您发布语法错误以便将它们编入索引,对于遇到相同问题的未来读者来说,这将非常有帮助。
此链接包含一些可能有帮助的其他示例。
传递包含方法的lambda的示例
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 "";
}