java8新特性——Lambda表达式
Lambda简介
lambda表达式(又被成为“闭包”或“匿名方法”)是Java8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式还增强了集合库。 Java8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。
Lambda语法
lambda表达式的语法由参数列表、箭头符号->
和函数体组成。函数体既可以是一个表达式,也可以是一个语句块:
(parameters) -> expression
或
(parameters) ->{ statements; }
简单举例
(int x, int y) -> x + y //接收2个参数,返回他们的和
() -> 42 // 不需要参数,返回值为42
(String s) -> { System.out.println(s); } //接收一个String对象,打印到控制台
下面两段代码分别是:使用匿名内部类来排序和使用lambda表达式来排序。
List<String> names = Arrays.asList("ranger", "java", "c", "c++"); Collections.sort(names, newComparator<String>() { @Override publicintcompare(String o1, String o2) { returno1.compareTo(o2); } });
Collections.sort(names, (String o1, String o2) -> o1.compareTo(o2));
这个例子可以很明显的看出lambda表达式简化代码的效果。 接下来展示lambda表达式和Stream的配合。
下面的三段代码是将集合内容全部转化为大写,
普通青年:
List<String> names =Arrays.asList("ranger", "java", "c", "c++"); List<String> uppercases = newArrayList<>(); for(String name : names) { uppercases.add(name.toUpperCase()); }
文艺青年:
List<String> uppercases = Lists.transform(names, newFunction<String, String>() { @Override publicString apply(String name) { returnname.toUpperCase(); } });
lambda:
List<String> uppercases = names.stream().map((String name) -> {returnname.toUpperCase();}).collect(Collectors.toList());
这里map方法就是接受了一个lambda表达式
总结
Java SE 8提供的新语言特性并不算多——lambda表达式,方法引用,默认方法和静态接口方法,以及范围更广的类型推导。但是把它们结合在一起之后,开发者可以编写出更加清晰简洁的代码,类库编写者可以编写更加强大易用的并行类库。
参考
http://ifeve.com/lambda/
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Eric 来源: JavaRanger
- 标签: Lambda
- 发布时间:2016-03-07 23:30:48
- [51] Oracle MTS模式下 进程地址与会话信
- [49] 图书馆的世界纪录
- [49] IOS安全–浅谈关于IOS加固的几种方法
- [49] 如何拿下简短的域名
- [45] android 开发入门
- [44] 【社会化设计】自我(self)部分――欢迎区
- [42] 界面设计速成
- [42] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 视觉调整-设计师 vs. 逻辑
- [40] Go Reflect 性能