成都网站建设设计

将想法与焦点和您一起共享

lambda的入门详解

1.为什么用lambda

创新互联建站是一家专业提供浦口企业网站建设,专注与网站设计制作、成都网站设计、H5高端网站建设、小程序制作等业务。10年已为浦口众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

简化我们的操作

举个例子

创建一个线程

new Thread(new Runnable() {

@Override

public void run() {

System.out.println("hh");

}

}).start();

以前我们快速创建一个线程要这样

现在用lambda

new Thread(()-> System.out.println("lambda-->hh")).start();

一个更重要的原因是Java 以后为了更好的函数式编程

2.lambda怎么用

2.1 lambda的使用场景

lambda只能用在函数式接口,函数式接口就是一个接口里面只有一个抽象方法

* @author Arthur van Hoff

* @see java.lang.Thread

* @see java.util.concurrent.Callable

* @since JDK1.0

*/

@FunctionalInterface

public interface Runnable {

/**

* When an object implementing interface Runnable is used

* to create a thread, starting the thread causes the object's

* run method to be called in that separately executing

* thread.

*

* The general contract of the method run is that it may

* take any action whatsoever.

*

* @see java.lang.Thread#run()

*/

public abstract void run();

}

可以通过@FunctionalInterface来表示是一个函数式接口

Java 为我们创建了很多常用的函数式接口,不用我们一个一个来创建

四大内置函数式接口

Consumer< T > 消费性 接口: void accept(T t);

Supplier< T > 供给型接口 : T get();

Function< T , R > 函数式接口 : R apply (T t);

Predicate< T > 断言形接口 : boolean test(T t);

2.2 使用

(参数)->{方法体}

new Thread(()-> { System.out.println("lambda-->hh");}).start();

其实到这就可以熟练的用lambda,但是它还能简化,你说气不气=。=

1.一个参数时可省略()

Consumer consumer = x -> System.out.println(x);

consumer.accept("1个参数省略()");

2.方法体只有一条语句省略{}

== 不管它是否需要有返回值==

Function function= x-> x;

Integer apply = function.apply(1);

System.out.println(apply);

3.类型推断

lambda 表达式的参数类型可省略不写

聪明的你肯定发现了为什么参数 不需要写类型,为什么不需要,Java会根据泛型来推断

你也可以指定参数的类型,但是没必要

Consumer consumer = (String x) -> System.out.println(x);

3.方法引用

System.out.println("呼呦呦");

public void println(String x) {

synchronized (this) {

print(x);

newLine();

} 郑州人流医院哪家好 http://mobile.zhongyuan120.com/

}

println是一个参数没有返回

这和Consumer 消费者接口很符合啊,下面这样写可不可以简化啊(就nm事多)

Consumer consumer = x -> System.out.println(x);

简化版

Consumer consumer1 = System.out::println;

方法引用 参数与返回值需要一致

/**

* 方法引用 如果lambda体中有方法已经实现,我们可以使用 方法引用 参数与返回值需要一致

*

* 主要有3种

* 对象::实例方法

* 类::静态方法

* 类::实例方法

*

* 构造器引用

* 调用的构造方法与传入的参数有关

*

* 数组引用

* Type[]:new;

*/


网站标题:lambda的入门详解
分享地址:http://chengdu.cdxwcx.cn/article/jpgihd.html