seo查询官方网站,水贝网站建设,南京开发,wordpress新闻站自动采集一.语法
基本语法#xff1a;(parameters)-expression或者(parameters)-{statements;}
parameters#xff1a;类似方法中的形参列表#xff0c;这里的参数是函数式接口里面的参数。这里的参数可以明确说明#xff0c;也可以不声明而由JVM隐含的推断。当只有一个推…一.语法
基本语法(parameters)-expression或者(parameters)-{statements;}
parameters类似方法中的形参列表这里的参数是函数式接口里面的参数。这里的参数可以明确说明也可以不声明而由JVM隐含的推断。当只有一个推断类型是可以省略圆括号
-可以理解为被用于
方法体可以是表达式也可以是代码块是函数时接口里方法的实现
举例
()-2 不需要参数返回值是2
x-3*x 只需要一个参数返回该参数的二倍
(x,y)-xy 需要两个参数返回他们的和
(int x,int y)-x*y 两个参数返回他们的乘积
(String s)-System.out.println(s) 接收一个String对象并打印
二.函数式接口
1.定义
如果一个接口只有一个抽象方法那么这个接口就是一个函数式接口
2.FunctionalInterface注解
用了这个注解就表示该接口是一个函数式接口只能写一个抽象方法如果多写了一个就会报错。
3.可以有其他非抽象的方法
三.Lambda表达式的基本用法
首先准备以下六个函数式接口 如果没有Lambda表达式应该如下调用用到了匿名内部类重写了test方法如下 以上六种函数式接口使用Lambda表达式如下 注意以上所有return语句的return###都可以直接如下写法 四.变量的捕获
Lambda表达式当中存在变量的捕获我们先通过匿名内部类来了解变量的捕获 如上可以正常输出但下面的代码就报错啦 这是因为所捕获的变量要么是被final修饰要么就得保证在使用之前没有被修改过所以如下代码也会报错 在Lambda表达式中也可以进行变量的捕获
同理只可以是final修饰的常量或者从未修改过的变量 五.Lambda表达式在集合当中的使用
1.Collection接口forEach()方法
该方法在Iterable接口中 它的参数是Consumer类型的即实现了Consumer接口的一个对象该Consumer接口就是一个函数式接口它里面只有一个抽象方法accept方法 那么我们该如何使用foreach方法呢先看一下源码 源码中将list中的元素依次传向了抽象方法accept如果我们想打印list中的对象就要如下使用Lambda表达式 其中list.forEach((String s)- System.out.println(s));表示要调用forEach方法调用时传入一个实现了Consumer接口的对象其中这个Consumer接口是一个函数式接口有一个抽象方法accept它只有一个参数String类型无返回值。(String s)- System.out.println(s)表示要对于传入的这个参数进行打印处理。
这个Lambda表达式就等价于 2.sort()方法 还是像上面的分析方法它传入了一个实现了Comparator接口的对象它也是一个函数式接口只有一个抽象方法compare所以使用方法如下 等价于 3.Map接口forEach()方法
先看源码 参数是实现了BiConsumer接口的一个对象这也是一个函数式接口: 要重写accept方法 总之Lambda表达式使得代码更加简洁但是却是得代码的可读性变差了。