2018-10-19 分分钟教会你使用Lambda表达式

Java 中使用 Lambda表达式 Lambda的作用 Lambda表达式的作用主要是用来简化接口的创建,interface。 需要注意的是: 1.任何需要使用interface的地方都可以使用Lambda表达式来简化; 2.Lambda表达式不能够简化类或者抽象类得创建,如果试图使用Lambda表达式去创建一个类或者抽象类 将会报错如下英文信息 ”Target type of a lambda conversion must be an interface“ 这就是为什么Lambda表达式只用用来简化创建接口

Java中的Interface Lambda表达式既然是用来简化创建接口的,那么就先看看接口里面都包含些什么

1.接口中可以定义public static final 的常量 2.接口中可以定义多个public的方法 一个接口就包含上面两方面的内容,不会再有其他的东西了 但是这里Lambda表达式只能用来简化仅包含一个public方法的接口,也就是说,如果一个接口中包含了多个public方法,那么就不能够使用Lambda表达式进行创建

现在知道了Lambda表达式只能用来简化仅包含一个public方法的接口的创建,现在就具体说如何使用Lambda表达式 无论如何,这个接口中的方法都会以一下的6种形式中的一种出现

1.返回值为void,没有参数 2.返回值为void,有一个参数 3.返回值为void,有多个参数 4.有返回值,没有参数 5.有返回值,有一个参数 6.有返回值,有多个参数 现在分别就6种情况给出写法

public interface In { void func(); }

In in1 = ()->{};//这基本上最简单的Lambda表达式的写法了,实现的方法将什么都不会做 In in2 = ()->System.out.println("Func");//这里实现的方法将会输出一个字符串 In in3 = ()->{ System.out.println("Func1"); System.out.println("Func2"); };//使用{}来使用多个语句

public interface In { void func(int a); }

In in = a->System.out.println(a); In in = (a)->{};

public interface In { void func(int a,int b,int c); }

In in = (a,b,c)->{ //写入语句 };

public interface In { int func(); }

In in = ()->2; In in1 = ()->{return 2;};

public interface In { int func(int a); }

In in = a->a+1; In in2 = a -> { return a+1; };

public interface In { int func(int a,int b,int c); }

In in = (a,b,c)->a+b+c; In in1 = (a,b,c)->{ return a+b+c; };

掌握了上面这几种情形,现在就拿一些试试,比如说常见的开启子线程,常规代码是这样的

new Thread(new Runnable() { @Override public void run() { //do something } }).start();

这里就可以使用Lambda来简化上面的写法

new Thread(()->{ //do something }).start();

之所以可以这样写,就是因为Runnable是一个只有一个run方法的接口

所以要记住:所有使用接口的地方都可以Lambda表达式来进行简化,只是一个简单的替换而已。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏柠檬先生

es6 数组扩展方法

1.扩展运算符     含义: 扩展运算符,三个点(...),将一个数组转为用逗号分隔的参数顺序。       例如:         console.log(...

2279
来自专栏令仔很忙

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键...

1181
来自专栏GreenLeaves

C# int? 关键字

1、int?  关键字说明 (1)、int? 表示一个int类型,且该int类型可空,如果不加?的话,那么int类型的默认值为0,不能赋null值,代码如下: ...

20210
来自专栏技术博客

C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

   这一节主要来了解一下类和结构体之间的异同点、以及针对String和StringBuilder的用法、equals和==,其实可以看出很多地方都用到了上一节...

954
来自专栏技术博客

C#基础知识系列六(静态类和静态类成员)

  静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。 也就是说,不能使用 new 关键字创建静态类类型的变量。 因为没有实例变量,所以要使用类名本身...

1222
来自专栏java达人

java中Comparator的用法

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。 接下来我们模拟下在集合对象中对日期属性进行排序 一、实...

23510
来自专栏小樱的经验随笔

【Java学习笔记之二】java标识符命名规范

什么是标识符 就是程序员在定义java程序时,自定义的一些名字。标识符可以应用在类名、变量、函数名、包名上。 标识符必须遵循以下规则 标识符由26个英文字符大小...

3427
来自专栏racaljk

[golang] go的typeswitch guard(类型区别)语法和type assertion(类型断言)语法

最近在实现golang,看到个go的特性语法: typeswitch guard。

1533
来自专栏码云1024

C# ref与out

2885
来自专栏博客园

.NET面试题解析(04)-类型、方法与继承

6. 在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承自A,并且使用不同的方式改变了父类方法Print()的行为。测试...

1413

扫码关注云+社区

领取腾讯云代金券