Lambda 表达式
分类:软件编程
阅读:30
作者:皇太极
发布:2020-05-05 22:13:58

java8开始增加了新特性, Lambda表达式

使用表达式, 我们可以不需要实现 @FunctionalInterface 标记的接口, 大大简化我们的代码, 使可读性变的更强

比如:

  • 版本1

    1. Arrays.sort(args, new Comparator<String>() {
    2. @Override
    3. public int compare(String o1, String o2) {
    4. return o1.compareTo(o2);
    5. }
    6. });
  • 版本2

    1. Arrays.sort(array, (s1, s2) -> {
    2. return s1.compareTo(s2);
    3. });
  • 版本3

    1. Arrays.sort(array,(s1,s2)->s1.compareTo(s2));
  • 版本4

    1. Arrays.sort(array,String::compareTo);

如上4个版本分别体现出了Lambda的强大, 可读性也很强.

以上只是常规的使用, 甚至还可以更强


  • 版本5
  1. public int abc(String a, String b) {
  2. return new Random().nextBoolean() ? 1 : -1;
  3. }
  4. Arrays.sort(array, this::abc);

方法引用, 即如果某个方法签名和接口恰好一致, 就可以直接传人方法引用

方法签名只看参数类型和返回类型,不看方法名称,也不看类的继承关系

因为上面的 abc 方法也是传人两个字符串参数, 返回整型, 所以 可以将abc()当作参数传递给sort()
上面采用了 this::abc , 其实任何符合条件的都是可以的, 包括 static 方法等

只要能理解这个, 任何Lambda表达式都可以看懂,
理解这个层面, 就很容易对 后续的 Stream 有个快速的学习.


什么? 有同学会对版本4有疑问 ?