
【SE-03】Lambda表达式、函数式接口与方法引用
Consumer :用于消费操作,如打印日志。 Function<T, R>:用于函数操作,如数据转换。 Supplier :用于供应操作,如创建对象。 BiPredicate<T1, T2>:用于双参数的逻辑判断。 对象 :: 非静态方法 类 :: 静态方法 类 :: 非静态方法 对象 :: 非静态方法 类 :: 静态方法 类 :: 非静态方法
发布日期:2021-05-07 08:58:12
浏览次数:24
分类:精选文章
本文共 2916 字,大约阅读时间需要 9 分钟。
Lambda表达式与函数式接口
Lambda表达式
基本介绍
Lambda表达式是一种匿名函数,在Java中可以直接使用优化的方式进行操作。通过Lambda表达式,可以将功能性代码简化为更简洁的代码形式。
示例代码
以下是Lambda表达式的典型使用示例:
// 接收一个字符串并进行处理 Consumerconsumer = (str) -> { System.out.println("处理结果:" + str); }; // 可以直接调用 consumer.accept("北京");
Lambda表达式可以直接传递给接收者(如Consumer、Function、Supplier等接口),简化了传统的匿名内部类方式。
语法标准
Lambda表达式的语法格式如下:
Lambda表达式 -> { 代码逻辑 }
或
Lambda表达式 -> 表达式
(对于返回值为void的情况,可以省略返回语句)
类型推断
在函数式编程中,类型推断可以帮助开发者更方便地书写代码。例如:
// 假设接口定义为:public interface MyInterface{ T method(T t); }MyInterface myInterface = () -> { return "Hello, World!";};
类型推断自动确定了方法的参数类型和返回类型,提升了代码的可读性和可维护性。
函数式接口
基本介绍
函数式接口是Java中的一种特殊接口,其每个方法都可以看作是一个函数。通过函数式接口,可以将逻辑抽象为功能,方便进行组合和传递。
代码示例
以下是一个简单的函数式接口的定义和使用示例:
// 定义一个函数式接口public interface Function{ R apply(T t);}
使用Lambda表达式实现:
// 定义一个函数式接口实例Functionfunction = (str) -> { return str.length();};// 调用函数System.out.println(function.apply("abc")); // 输出:3
四大函数式接口
在Java中,最常用的四个函数式接口包括:
Consumerconsumer = System.out::println;consumer.accept("测试");
Functionfunction = String::length;System.out.println(function.apply("测试")); // 输出:4
Suppliersupplier = Employee::new;Employee employee = supplier.get();
BiPredicatepredicate = String::equals;predicate.test("abc", "abd"); // 返回:false
其他函数式接口
除了上述四个,还有其他如Comparator
、BiFunction
等,用于更复杂的功能组合。
方法引用
方法引用是一种更高效的方式来传递函数,而不是传统的Lambda表达式。方法引用的使用场景包括:
使用情景
// 消费操作Consumerconsumer = System.out::println;consumer.accept("测试");
// 比较操作Comparatorcomparator = Integer::compare;System.out.println(comparator.compare(1, 2)); // 输出:1
// 字符串比较ComparatorstringComparator = String::compareTo;System.out.println(stringComparator.compare("abc", "abd")); // 输出:1
具体实现
// PrintStream中的void println(T t)Consumerconsumer = System.out::println;consumer.accept("北京");
// Integer中的int compare(T t1, T t2)Comparatorcomparator = Integer::compare;System.out.println(comparator.compare(3, 3)); // 输出:0
// String中的int compareTo(String s)ComparatorstringComparator = String::compareTo;System.out.println(stringComparator.compare("abc", "abd")); // 输出:1
构造器引用
构造器引用是一种特殊的方法引用,用于创建对象。例如:
// 无参构造Suppliersupplier = Employee::new;Employee employee = supplier.get();// 有参构造BiFunction function = (id, name) -> new Employee(id, name);Employee employee = function.apply(10, "zs");
数组引用
数组可以看作特殊的构造器:
// 创建一个固定长度的数组Functionfunction = (length) -> new String[length];String[] array = function.apply(5);// 使用String[]::newString[] array = String[]::new;
总结
通过Lambda表达式和函数式接口,可以简化代码实现,提高代码的可读性和可维护性。方法引用和构造器引用则为代码提供了更高效的传递方式。这些技术在函数式编程中发挥着重要作用。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月04日 21时25分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【IoT】蓝牙BLE基础:CC254x通信系列之模拟SPI协议
2019-03-05
【IoT】TI BLE CC2541 串口控制蓝牙详解
2019-03-05
【产品】项目管理的五个过程和九大知识领域之二
2019-03-05
【项目管理】项目管理流程浅析
2019-03-05
【Tool】如何使用 Uniflash 烧写 WIFI 芯片 CC3200
2019-03-05
copy_{to, from}_user()的思考
2019-03-05
Web前端安全策略之CSRF的攻击与防御
2019-03-05
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
linux运维中常用的命令
2019-03-05
M1芯片的macbook安装王者荣耀,原神,崩坏方法
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
firefox中angular2嵌套发送请求问题
2019-03-05
【mybatis3】调试/断点打印日志
2019-03-05
C++
2019-03-05
[CTFSHOW]PHP特性
2021-05-08
navigator对象
2021-05-08
关于EFI系统分区(ESP)你应该知道的3件事
2021-05-08
5.Mybatis复杂映射开发
2021-05-08
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2021-05-08