Java lambda表达式

今天正儿八经地学习一下java8,这里记录一下.(我看的书是《java8实战》,这里举的例子大抵上都是书上的)

lambda在很多语言中都有,但是java中一直没有,直到java8中才出现,在我的理解中,lambda就是用来代替匿名类的,而且我认为lambda是一个函数,虽然在java中,它是一个函数式接口的某种意义上的实现,

lambda形式

首先lambda的形式是这样的 (parameters) -> expression 或者是 (parameters) -> {expression;}

parameters是指参数列表,和方法的参数列表是一个意思,

expression是指lambda主体,也就是说具体操作,

还有 "->"这个符号,(我总是记成"=>",因为scala中lambda表达式是用=>的)

这里面有一些需要注意的,如果你使用花括号,那么expression后面必须夹分号,如果要求有返回,那还必须加return(在花括号中)

lambda使用

lambda的使用在java中还是有一些限制的,我之前说过,我认为它是用来取代匿名类的(只是在java中),那么它的使用就和匿名类很相似了,lambda表达式通常用于方法的参数,而在参数列表中的lambda的类型是一个函数式接口,什么是函数式接口呢,简单来说,函数式接口就是只有一个抽象方法的接口。这里有一个需要注意的细节,只有一个抽象方法的接口,不代表只含有一个方法,如果在java8之前,或许是你认为的那样,但是到了java8以后,java中添加了默认方法,接口中的默认方法是可以有方法体的,(其实相当于抽象类,但是只是从某种作用上可以看做,二者还是有本质区别的)所以如果接口中有默认方法,但是只有一个抽象方法,那么它还是函数式接口。知道了这些,写一个函数式接口也就没什么问题了。

比如

interface P{
    boolean test(T t);
}

这个函数式接口就是接受一个任意类型的参数,返回一个布尔型

如果用lambda怎么实现呢,很简单,就是(Integer i)  ->   i==1

 

lambda还可以用在stream流中,stream也是java8的新特性,想了解的可以自行Google

 

lambda的意义

其实这个一般是在开始的时候说的,但是我想在最后说。也不能说是lambda的意义,可以说是方法注入的意义,即将方法作为参数注入另一个方法中,虽然在java中lambda不是一个方法,作为参数时参数类型也是一个接口,但是我喜欢将它看做方法。而将方法作为参数注入另一个方法有什么好处呢?我觉得这个当你有一定的编程经历的时候,或许会了解的,也可以看一看设计模式相关的书,这个技术的意义就很容易理解了,(其实是我自己说不清数,虽然我知道,但是不知道怎么表达)

 

告知

这篇博客只是介绍了java lambda最入门的一些使用,如果想了解更多,《java8实战》这本书真的不错。

这里提供一下我的pdf

链接: https://pan.baidu.com/s/16P2mNJJzqpxPvkvZpF1CPQ 密码: h348

你可能感兴趣的:(java)