Java中lambda表达式

Java中的lambda表达式是从Java 8开始引入的一种新特性,它提供了一种简洁、优雅的方式来表示函数式接口的实例。lambda表达式使得开发者可以直接在代码中定义匿名函数,从而避免了为每一个小功能编写单独的类或方法的繁琐过程。下面是关于Java lambda表达式的详细讲解及代码示例。

Lambda表达式的基础概念

Lambda表达式的基本结构包括三个部分:

  1. 参数列表(parameters):与常规方法的参数列表相似,可以省略参数类型(JVM会自动推断),如果只有一个参数,甚至可以省略圆括号。
  2. 箭头符号(->):分隔参数列表和函数体,可以理解为"产生"或"转换为"。
  3. 函数体 (body):可以是一个表达式或代码块。如果函数体只有一条语句,可以不使用花括号,并且如果该语句有返回值,则隐式返回该值。如果有多个语句,则需要使用花括号包围,并且如果需要返回值,则必须显式使用return语句。

函数式接口

要使用lambda表达式,必须有一个函数式接口 作为上下文。函数式接口是指仅包含一个抽象方法的接口,例如Runnable, Predicate, Function, Consumer, Supplier等。Java 8引入了@FunctionalInterface注解来标记这样的接口,尽管这不是强制性的。

示例

示例1:使用Runnable
java 复制代码
Runnable task = () -> System.out.println("Running a task.");
task.run();

在这个例子中,Runnable是一个函数式接口,它的抽象方法run()没有参数且没有返回值。Lambda表达式() -> System.out.println("Running a task.");就是对run()方法的实现。

示例2:使用Predicate过滤集合
java 复制代码
List<String> names = Arrays.asList("John", "Jane", "Adam", "Tom");
Predicate<String> startsWithJ = name -> name.startsWith("J");

List<String> filteredNames = names.stream()
                                 .filter(startsWithJ)
                                 .collect(Collectors.toList());
System.out.println(filteredNames);

这里,Predicate<String>是一个函数式接口,它有一个抽象方法test(T t),返回一个布尔值。Lambda表达式name -> name.startsWith("J")用于检查字符串是否以"J"开头。

示例3:使用Function转换字符串
java 复制代码
Function<String, Integer> stringToInt = s -> Integer.parseInt(s);

Integer result = stringToInt.apply("123");
System.out.println(result);

Function<String, Integer>是一个函数式接口,它的抽象方法是R apply(T t)。Lambda表达式s -> Integer.parseInt(s)将字符串转换为整数。

总结

Lambda表达式使得Java代码更加简洁、可读性强,特别是在处理集合、流操作以及事件监听等场景时,能够显著提升开发效率。它也是Java向函数式编程风格迈进的重要一步。

相关推荐
麻瓜生活睁不开眼6 分钟前
Android16修改全局桌面视图边框四直角显示为弧边圆角
android·java·深度学习
dear_bi_MyOnly22 分钟前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
Wang's Blog42 分钟前
Go-Zero 项目开发43:基于 Filebeat 收集各个服务的日志信息
开发语言·golang·go-zero·filebeat
2601_953720821 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
丈剑走天涯2 小时前
JDK 17 正式特性
java·开发语言
秋田君2 小时前
QT_QFontDialog类字体对话框
开发语言·qt
圣光SG2 小时前
Java操作题练习(七)
java·开发语言·算法
麻瓜老宋3 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十三步,多行输入、进制输出、错误恢复、常量折叠、配置加载等
c语言·开发语言·atomcode
q567315234 小时前
企业级 HTTP 代理采购选型:技术评估清单 15 项
开发语言·网络·爬虫·网络协议·http·隧道ip·代理ip
@航空母舰4 小时前
SpringBoot通过Map实现天然的策略模式
java·spring boot·后端