java lambda表达式

一、lambda表达式的语法

1、lambda表达式就是一个代码块,以及必须传入代码的变量规范。
2、lambda表达式形式:参数,箭头(->)以及一个表达式。如果代码要完成的计算无法放在一个表达式中,就可以像写方法一样,把这些代码放在 { } 中。并包含显示的return语句。例如:
        (String first , String second)->{
              if (first.length()<second.length())  return -1;
              else if (first.length()>second.length())  return 1;
              else return 0;
        }
3、即使lambda表达式没有参数,仍然要提供空括号,就像无参方法一样:
          ()->{for (int i=100; i>=0; i--) System.out.println(i);  }
4、如果可以推导出一个lambda表达式的参数类型,则可以忽略其类型。
5、如果方法只有一个参数,而且这个参数的类型可以推导得出,那么甚至还可以省略小括号:
           ActionListener listener=event->System.out.println("");
6、无需指定lambda表达式的返回类型。lambda表达式的返回类型总是会由上下文推导得出。
7、如果一个lambda表达式只在某些分支返回一个值,而在另外一些分支不返回值,这是不合法的。例如:
             (int x)->{ if (x>=0) return 1; }就不合法。
8、使用 lambda 表达式的重点是延迟执行

二、函数式接口functional interface

1、对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个 lambda 表达式。这种接口称为函数式接口。

2、lambda表达式可以传递到函数式接口,能转换为函数式接口。

3、Java API在java.util.function 包中定义了很多非常通用的函数式接口。
     java.util.function 包中有一个尤其有用的接口 Predicate,这个接口专门用来传递 lambda 表达式:
         public interface Predicate<T> {
              boolean test(T t);  
         }

三、方法引用method reference

1、要用 :: 操作符分隔方法名与对象或类名,即方法引用,主要有3种情况:
     •  object::instanceMethod
     •  Class::staticMethod
     •  Class::instanceMethod
    在前2种情况中,方法引用等价于提供方法参数的lambda表达式。System.out::println 等价于 x -> System.out.println(x)。类似地,Math::pow 等价于(x,y) -> Math.pow(x, y)。
  对于第3种情况,第1个参数会成为方法的目标。例如,String::compareToIgnoreCase等同于(x,y)-> x.compareToIgnoreCase(y)。

2、如果有多个同名的重载方法, 编译器就会尝试从上下文中找出你指的那一个方法。

3、可以在方法引用中使用 this 参数。例如,this::equals 等同于 x-> this.equals(x)。使用 super 也是合法的。

4、构造器引用:与方法引用很相似,只不过方法名为new。例如,Person::new是Person构造器的一个引用。
    可以用数组类型建立构造器引用。例如int[]::new是一个构造器引用它有一个参数:即数组的长度。这等价于lambda表达式x->new int[x]. 

四、变量作用域

1、lambda表达式可以捕获外围作用域中变量的值,即把自由变量的值存储下来。但,只能引用值不会改变的变量,这个变量初始化之后就不会再为它赋新值。

2、lambda 表达式的体与嵌套块有相同的作用域,同样适用命名冲突和遮蔽的有关规则。

3、在一个 lambda 表达式中使用 this 关键字时, 是指创建这个 lambda 表达式的方法的 this 参数。

五、 Comparator

Comparator接口包含很多方便的静态方法来创建比较器。这些方法可以用于lambda表达式或方法引用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值