lambda表达式:语法

来源:互联网 发布:手机淘宝如何复制链接 编辑:程序博客网 时间:2024/05/17 07:39

.第一个lambda表达式:

(String first, String second) -> Integer.compare(first.length, second.length())

表达式的格式为:参数、箭头 -> 表达式

如果负责计算的代码无法用一个表达式表示,那么可以用编写方法的方式来编写:即用 {} 包裹代码并明确使用return语句

(String first, String second) -> {            if (first.length() < second.length()) return -1;            else if (first.length() > second.length()) return 1;            else return 0;        }

如果lambda表达式没有参数,可以提供一对空的小括号,如同不含参数的方法那样:

() -> {            for (int i=0; i<100; i++)                doWork();        }

如果一个lambda表达式的参数类型是可以被推导的,那么就可以省略它们的类型,例如:

Comparator<String> comp =                (first, second) -> Integer.compare(first.length(), second.length());
这里,编译器会推导出first和second必须是字符串,因为lambda表达式被赋给了一个字符串比较器。


如果某个方法只含有一个参数,并且该参数的类型可以被推导出来,甚至可以省略小括号:

EventHandler<ActionEvent> listener = event -> System.out.println("Thanks for clicking!");;        //无须(event) -> 或 (ActionEvent event) ->


可以像对待参数一样向lambda表达式的参数添加注解或者final修饰符,如下:

(final String name) -> ...(@NonNull String name) -> ...

不需要为一个lambda表达式执行返回类型,它总是会从上下文中被推导出来,例如:

(String first, String second) -> Integer.compare(first.length(), second.length())
可以被使用在期望结果类型为int的上下文中

在lambda表达式中,只在某些分支中返回值是不合法的。例如

(int x) -> { if (x >= 0) return 1;}


0 0
原创粉丝点击