当前位置:网站首页>简单使用Lambda表达式
简单使用Lambda表达式
2022-08-09 06:21:00 【嘿嘿潶黑黑】
Lambda表达式
语法
() -> {}
() 是接口方法的括号,如果有参数,也需要写参数。只有一个参数时,括号可以省略。
-> 分割左右部分
{} 要实现的方法体,只有一行代码时,可以不加
概念
使用于lambda表达式的接口称之为函数型接口,函数型接口说白了就是一个抽象方法的接口。
基本语法
interface Test1Service{
void sayMsg(String msg);
}
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test1Service ts = msg -> System.out.println("test"+msg);
ts.sayMsg("hello");
}
}
注意事项
- java8为函数式接口引入了一个新注解**@FunctionalInterface**,该注解主要用于编译级错误检查
- 接口中包含了两个抽象方法的话,就违反了函数式接口的定义,IDE会直接报错
- 函数式接口里可以包含默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的
- 函数式接口里可以包含静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的
- 函数式接口里可以包含Object里的public方法,因为任何一个函数式接口的实现,默认都继承了Object类,包含了来自java.lang.Object里对这些抽象方法的实现
进阶
方法引用
我们要实现接口的方法与另一个方法A类似,(这里的类似是指参数类型与返回值部分相同),我们直接声明A方法即可
方法引用的语法有三种:
- 类::静态方法名
- 类::实例方法名
- 对象::实例方法名
interface Function{
String sendMsg(Object o);
@Override
boolean equals(Object obj);
}
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Function f = String::valueOf;
System.out.println(f.sendMsg(1));
System.out.println(f.sendMsg('c'));
}
}
构造引用
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
class Function3 {
private int x;
private String y;
Function3(){
x = 0;
y = "hello";
}
Function3(int x){
this.x = x;
y = "hello";
}
Function3(int x,String y){
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
@Override
public String toString() {
return "Function3 [x=" + x + ", y=" + y + "]";
}
}
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//无参
Supplier<Function3> f1 = () -> new Function3();
Function3 ft1 = f1.get();
System.out.println(f1.toString());
System.out.println(ft1);
//单参
Function<Integer, Function3> f2 = x -> new Function3(x);
System.out.println(f2.apply(1));
//双参
BiFunction<Integer, String, Function3> f3 = (x,y) -> new Function3(x,y);
System.out.println(f3.apply(1, "test"));
}
}
边栏推荐
- el-table缓存数据
- Adds, deletes, searches, and changes the leading doubly circular linked list (implemented in C language)
- Unity C# 委托——事件,Action,Func的作用和区别
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
- Remember a nest.js route that matches all the path problems that follow
- Cysteine/Galactose/Perylenediimide Functionalized Fe3O4 Fe3O4 Nanomaterials | Scientific Research Reagents
- 什么是excel文件保护
- 具有CT造影功能的硫化铋纳米棒|硫化铋-锌原卟啉复合材料(PAMAM/Bi2S3复合纳米粒子)
- Unity 五子棋游戏设计和简单AI(3)
- Chapter 7. Image-based lighting
猜你喜欢
普罗米修斯原理及节点发布
一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
中英文说明书丨CalBioreagents 醛固酮单克隆抗体
Deep Learning - Principles of Neural Networks 2
代码目录结构
Bismuth sulfide nanorods with CT imaging function | Bismuth sulfide-zinc protoporphyrin composites (PAMAM/Bi2S3 composite nanoparticles)
在命令行打开LaTeX宏包手册
年薪35W的测试工程师被裁亲身经验:不得不听的忠告
sql problem solving statement to create a table
2022-08-08:给定一个数组arr,表示从早到晚,依次会出现的导弹的高度。 大炮打导弹的时候,如果一旦大炮定了某个高度去打,那么这个大炮每次打的高度都必须下降一点。 1) 如果只有一个大炮,返回
随机推荐
MYSQLg高级------批量插入百万级数据量
磁性核壳四氧化三铁颗粒负载金纳米星|磁性Fe3O4-POSS-COOH|超顺磁四氧化三铁聚多巴胺核壳结构纳米粒子
记一个 nest.js 路由匹配后面所有路径问题
数据库中间件-jdbi
正则表达式-判断字符串是否匹配“AABB”模式
RNN-T
聚酰胺-胺(PAMAM)树形聚合物-硫化铋复合纳米粒子|硫化铋修饰Gd‑DTPA‑OA配体|科研实验用
契约测试(上):什么是契约测试
kubernetes apparmor入门
[GO], arrays and slices
sql问题解答创建表的语句
运算放大器(OPA)超详细参数讲解-运放---以及8个型号的运算放大器分析对比
Deep Learning - Principles of Neural Networks 2
中英文说明书丨TRC D-阿卓糖(D-Altrose)
C# 利用iTextSharp画PDF
声母-字母查询工具-词语缩写查询在线工具
tidb 宕机测试
S7-200SMART PLC Modbus TCP communication
二硫化钼/二氧化铪的复合纳米材料(MoS2/HfO2)|钽掺杂二氧化铪纳米颗粒(齐岳bio)
半胱氨酸/半乳糖/苝二酰亚胺功能化Fe3O4四氧化三铁纳米材料|科研试剂