码迷,mamicode.com
首页 > 编程语言 > 详细

java8之lambda表达式(lambda表达式语法)

时间:2015-05-21 15:42:39      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

到目前为止,在Java中向其他代码传递一段代码并不是很容易。你不可能将代码块到处传递。由于java是一个面向对象的语言,因此你不得不构建一个属于某个类的对象,由它的某个方法来包含所需的代码。

lambda表达式帮我们解决了这个问题,可以直接传递代码块!Java中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;
}

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

() -> {for(int i=0; i<1000;i++) doWlrk();}

如果一个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!");

注意:你可以像对待方法参数一样向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;}


java8之lambda表达式(lambda表达式语法)

标签:

原文地址:http://my.oschina.net/fhd/blog/417692

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!