Lambda表达式
一、Lambda表达式
1)函数式接口
函数式接口(Functional Interface)是只包含一个方法的抽象接口。
比如Java标准库中的java.lang.Runnable,java.util.concurrent.Callable就是典型的函数式接口。
在Java 8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个抽象方法。
函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。简化匿名内部类
2)lambda表达式
“lambda表达式”是一段可以传递的代码,因为他可以被执行一次或多次。其语法结构如下:
(parameters) -> expression 或者 (parameters) -> {statements;}
(括号里的参数可以省略其类型,编译器会根据上下文来推导参数的类型,你也可以显式地指定参数类型,如果没有参数,括号内可以为空。方法体,如果有多行功能语句用大括号括起来,如果只有一行功能语句则可以省略大括号。)
例子:
public class J8test { //根据名字长度倒序排序,原来要new一个匿名内部类来比较 @Test public void test1() { List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson"); names.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.length()-o1.length(); } }); names.stream().forEach(str -> System.out.println(str)); } //使用lambda表达式后 @Test public void test2() { List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson"); names.sort((s1,s2)->s2.length()-s1.length()); names.stream().forEach(str -> System.out.println(str)); } }
public class J8test { public static void main(String[] args) { //启动一个新线程 new Thread(new Runnable() { @Override public void run() { for(int i=0;i<10;i++) { System.out.println("111"); } } }, "线程1").start(); //用lambda表达式启动一个新线程 new Thread(()-> { for(int i=0;i<10;i++) { System.out.println("111"); } }) .start(); } }
3)方法引用
方法引用是lambda表达式的一种简写形式。 如果lambda表达式只是调用一个特定的已经存在的方法,则可以使用方法引用。
使用"::"操作符将方法名和对象或类的名字分隔开来
有四种情况:
对象::实例方法、类::静态方法、类::实例方法、类::new
public class J8test { @Test public void test3() { List<String> names = Arrays.asList("lucy","Mia","Isa","Jackson"); //names.sort((s1,s2)->s1.compareToIgnoreCase(s2)); names.sort(String::compareToIgnoreCase);//等价上面一行代码 names.stream().forEach(str -> System.out.println(str)); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具