技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Java --> java8新特性——Lambda表达式

java8新特性——Lambda表达式

浏览:1467次  出处信息

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/


建议继续学习:

  1. C++11的Lambda使用一例:华容道求解    (阅读:2471)
  2. 基于C++ Lambda表达式的程序优化    (阅读:1496)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1