网站首页 > java教程 正文
一:简介
JDK的升级的目的有以下几个:增加新的功能、修复bug、性能优化、简化代码等几个方面,Lambda表达式就是属于简化代码,用于简化匿名实现类,提供一种更加简洁的写法。Lambda表达式在Swift语言中称之为代码块,Lambda表达式可以认为是一种特殊的接口,该接口必须只有一个抽象方法。
语法
(参数类型 参数名, 数参数类型 参数名2...) -> {
// code
};
小括号()中的内容就是方法中的参数列表包括参数类型、参数名,其中参数类型是可以省略的,当参数个数只有一个时也可以省略掉小括号; 花括号{}中的内容就是方法中的方法体,当方法体中只有一行代码时可以省略{},当方法体中只有一行代码并且需要返回值时也可以省略掉return; 由于Lambda表达式是匿名实现类的简写,是一种特殊的接口,当赋值给一个变量时也少不掉分号;
Lambda表达式的作用
- 简化匿名实现类的书写
- 作为函数中的参数来传递
二:示例
示例1:两个参数,一个返回值
IHello 一个很普通的接口,但接口中只能有一个抽象方法
public interface IHello {
String sayHello(String name, String msg);
}
Main
public class Main {
public static void main(String[] args) {
// 将一个Lambda表达式赋值给一个接口,说明Lambda表达式就是一种接口数据类型,只不过该接口只能有一个抽象方法
// 参数列表可以省略参数类型,可以写成(name, msg),
// 在JDK1.8中有个叫做类型推断的东西,可以自动推断出参数的类型,
// 因为IHello中只有一个抽象方法,知道方法了就知道参数列表了,从而就能推出参数类型来
IHello iHello = (String name, String msg) -> {
String hello = name + ": " + msg;
return hello;
};
// 调用接口的方法
String content = iHello.sayHello("mengday", "happy new year everyone!");
System.out.println(content);
}
}
示例2:一个参数,一个返回值
public interface IHello {
String sayHello(String name);
}
Main
public class Main {
public static void main(String[] args) {
// 参数列表可以省略参数类型,当只有一个参数时可以省略小括号 (String name) --> (name) --> name
// 当方法体中只有一行代码并且有返回值时可以同时省略花括号和return
// { return name + ": " + "happy new year everyone!";} --> name + ": " + "happy new year everyone!";
IHello iHello = name -> name + ": " + "happy new year everyone!";
String content = iHello.sayHello("mengday");
System.out.println(content);
}
}
示例3:没有参数,没有返回值
public interface IHello {
void sayHello();
}
public class Main {
public static void main(String[] args) {
// 当表达式没有参数时一对小括号是不能省略掉的
IHello iHello = () -> System.out.println("mengday: happy new year everyone!");
iHello.sayHello();
}
}
从这三个示例中我们发现我们只定义了接口,并没有定义实现类,而是通过Lambda表达式来代替了实现类。 注意:Lambda接口只能有一个抽象方法,可以同时拥有多个静态方法和默认方法。
示例4:Lambda表达式参数
public interface IHello {
void sayHello(String name);
}
public class Main {
public static void sayHello(IHello iHello, String name) {
iHello.sayHello(name);
}
public static void main(String[] args) {
IHello iHello = name -> {
String content = name + ": " + "happy new year everyone!";
System.out.println(content);
};
// 这里可以把iHelo看成一个匿名实现类来传递参数
sayHello(iHello, "mengday");
// 如果去掉变量的接收,直接将Lambda表达式传递到参数中,此时Lambda表达式更像是一个函数
// 也就是说JDK1.8竟然可以将一个函数作为参数传递到方法中,这是之前版本做不到的
// 将函数作为方法的参数传递,一般用于回调函数,将回调函数传递到方法中
sayHello(name -> {
String content = name + ": " + "happy new year everyone!";
System.out.println(content);
}, "mengday");
}
}
示例5:集合排序示例
public static void main(String[] args) {
// 写法一:使用匿名内部类
// 好好学习,天天向上
List<String> words = Arrays.asList("good", "good", "study", "day", "day", "up");
// public static <T> void sort(List<T> list, Comparator<? super T> c)
Collections.sort(words, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// 降续排序
return s2.compareTo(s1);
}
});
System.out.println(words);
// 写法二:使用Lambda表达式
// 咱俩谁跟谁
words = Arrays.asList("we", "two", "who", "and", "who");
Collections.sort(words, (String s1, String s2) -> {return s2.compareTo(s1);});
System.out.println(words);
// 写法三:使用Lambda表达式(简写)
// 有事起奏,无事退朝
words = Arrays.asList("if", "you", "have", "something", "to", "say", "then", "say!",
"if", "you", "have", "nothing", "to", "say", "go", "home!");
Collections.sort(words, (s1, s2) -> s2.compareTo(s1));
System.out.println(words);
}
猜你喜欢
- 2024-09-19 Java8 的这个特性,用起来真的很爽
- 2024-09-19 Linux Centos7系统下关于jdk1.8的安装和配置讲解
- 2024-09-19 java8里的排序,1行代码搞定以前20行的事,程序员又可以早下班了
- 2024-09-19 Java入门第一天(java入门到)
- 2024-09-19 Java14~java8~Java1各大版本中令人激动的特性
- 2024-09-19 一文了解java字节码操作——javassist
- 2024-09-19 Linux在线安装JDK1.8(linux在线安装python3)
- 2024-09-19 程序员必须掌握的JDK1.8的新特性(一)
- 2024-09-19 五、安装配置JDK1.8(jdk1.8.0_151安装和配置)
- 2024-09-19 JDK 8 的安装与配置(jdk8安装教程win10详细)
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)