黑马程序员技术交流社区

标题: JAVA8 三大新特性详解 [打印本页]

作者: kingowe    时间: 2015-5-19 21:50
标题: JAVA8 三大新特性详解
一、Lambda 表达式
首先看看在老版本的Java中是如何排列字符串的:

代码如下:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
Collections.sort(names, new Comparator<String>() {
         @Override
          public int compare(String a, String b) {
                  return b.compareTo(a);
           }
});
只需要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常做法都是创建一个匿名的比较器对象然后将其传递给sort方法。

在Java 8 就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:

代码如下:
Collections.sort(names, (String a, String b) -> {     return b.compareTo(a); });    // 这不就是C++中的Lambda吗?
还可以去掉大括号{}以及return关键字:Collections.sort(names, (a, b) -> b.compareTo(a));

Lambda 作用域:
在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。

访问局部变量:
   直接在lambda表达式中访问外层的局部变量:
final int num = 1;
Converter<Integer, String> stringConverter =
        (from) -> String.valueOf(from + num);
stringConverter.convert(2);     // 3
和匿名对象不同的是,这里的变量num可以不用声明为final,该代码同样正确:
int num = 1;
Converter<Integer, String> stringConverter =
        (from) -> String.valueOf(from + num);


stringConverter.convert(2);     // 3













欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2