A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kingowe 中级黑马   /  2015-5-19 21:50  /  281 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、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








0 个回复

您需要登录后才可以回帖 登录 | 加入黑马