IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

java8新特性——Lambda表达式

JavaRanger 2016-03-07 23:30:48 累计浏览 2,424 次
本机暂存

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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,894)
  2. Java开发岗位面试题归类汇总 (累计阅读 22,156)
  3. android 开发入门 (累计阅读 19,527)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,147)
  5. HashMap解决hash冲突的方法 (累计阅读 12,654)
  6. 一个大二学生有关如何成为一名软件工程师的疑问及答复 (累计阅读 9,181)
  7. Java程序员应该知道的10个eclipse调试技巧 (累计阅读 8,012)
  8. 如何让员工忠于公司? (累计阅读 7,940)
  9. Java技术路线 (累计阅读 7,725)
  10. 聊聊ThoughtWorks面试 (累计阅读 7,614)