JAVA学习-行为抽象和Lambda.流

embedded/2024/9/25 4:37:23/

一、行为抽象与Lambda

1. 行为抽象:

行为抽象是指将方法作为参数传递给其他方法,从而实现将方法作为一种行为进行传递与调用的能力。在Java中,行为抽象常常使用接口来定义具体的行为。

2. Lambda表达式:

Lambda表达式是Java 8引入的一种新特性,它可以简洁地表示可传递的匿名函数。Lambda表达式可以替代使用匿名内部类的方式传递行为。

二、流(Stream)的概述

1. 流是指用于操作数据的元素序列,它是Java 8中引入的一种处理集合数据的抽象高级概念。流可以让你以一种类似于SQL查询语句的方式来处理集合数据。

2. 流的特点:

- 流是一种惰性计算,只有在终止操作被触发时才会执行。
- 流的操作是链式的,可以通过多个操作的组合来实现复杂的数据处理逻辑。
- 流的操作可以是并行的,可以充分利用多核处理器的优势。

3. 流的使用方法:

- 创建流:可以通过集合、数组、I/O流等方式来创建流。
- 中间操作:对流进行筛选、映射、排序等操作,生成新的流。
- 终止操作:对流进行聚合、收集、输出等操作,得到最终结果。

三、行为抽象和Lambda流的常见使用场景及比较:

1. 行为抽象:

- 常见应用场景:在多线程中,将具体的任务逻辑封装成接口,作为参数传递给线程进行执行。
- 优点:可以将具体的行为进行抽象,提高代码的可复用性和灵活性。
- 缺点:需要定义接口和实现类,对于简单的行为处理较为繁琐。

2. Lambda表达式:

- 常见应用场景:对集合的遍历、排序、筛选等操作,以及并发编程中的任务处理。
- 优点:简洁、灵活,可读性高,减少了样板代码的编写。
- 缺点:对于复杂的行为处理,Lambda表达式可能不够清晰,可读性较差。

3. 流:

- 常见应用场景:对集合数据进行高效操作和处理。
- 优点:代码简洁、可读性高,支持并行处理,适用于处理大量数据。
- 缺点:对于一些特殊需求,可能需要编写自定义的中间操作或终止操作。

代码示例:

java">// 行为抽象示例interface Action {void execute();}class Task {public void process(Action action) {action.execute();}}public class Main {public static void main(String[] args) {Task task = new Task();task.process(new Action() {@Overridepublic void execute() {System.out.println("Execute task...");}});}}// Lambda表达式示例public class Main {public static void main(String[] args) {Task task = new Task();task.process(() -> System.out.println("Execute task..."));}}// 流示例import java.util.Arrays;import java.util.List;public class Main {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(n -> n * 2).sum();System.out.println(sum); // 输出:18}}

       以上代码示例分别展示了行为抽象、Lambda表达式和流的使用方法。行为抽象示例中,定义了接口Action和类Task,通过实现接口并传递实现类的方式来实现行为的传递与调用。Lambda表达式示例中,通过箭头操作符"->"来定义匿名函数,并将lambda表达式作为参数传递给Task的process方法。流示例中,通过流的中间操作filter和mapToInt以及终止操作sum对集合数据进行处理和计算。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)


http://www.ppmy.cn/embedded/12930.html

相关文章

YOLOv8 训练自己的数据集(20240423)

环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 一、使用 YOLOv8 的 coco128 数据集熟悉一下如何训练和预测 1.1、在项目根目录…

CSS3新增特性(二)

四、2D 转换 • 属性名&#xff1a;transform &#xff08;可用于制作2D转换&#xff0c;也可用于制作3D转转换&#xff1b;2D转换是平面上的转换&#xff0c;3D转换是在三维立体空间的转换&#xff09; • 作用&#xff1a;对元素进行水平或垂直方向的移动、缩放、旋转、拉长…

Spring AOP 切面编程

1.切面编程 无需改变原有类的情况下对业务功能实现扩展或增强。 2.目前最流行的AOP框架有两个&#xff0c;分别为Spring AOP 和 AspectJ。 3.Spring AOP使用纯java实现&#xff0c;不需要专门的编译过程和类加载器&#xff0c;在运行期间通过代理方式向目标类织入增强的代码。 …

MySQL中的并发控制,读写锁,和锁的粒度

MySQL中的并发控制&#xff0c;读写锁&#xff0c;和锁的粒度 并发控制的概述 在数据库系统中&#xff0c;并发控制是一种用于确保当多个用户同时访问数据库时&#xff0c;系统能够提供数据的一致性和隔离性的机制。MySQL支持多种并发控制技术&#xff0c;其中包括锁机制、多…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

观察者模式:实现对象间的松耦合

在软件设计中&#xff0c;对象之间的通信是一个常见的问题。观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在其状态发生变化时通知其他对象。这种模式创建了一种依赖关系&#xff0c;使得一个对象改变状态时&#xff0c;所有…

【黑马点评Redis——003优惠券秒杀4——消息队列Stream】

1. 目前还存在的问题 设置的阻塞队列可能会超出最大长度系统重启会导致阻塞队列中的信息消失&#xff0c;可能会出现问题 2. 消息队列 消息队列 (Message Queue)。 字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色消息队列:存储和管理消息&#xff0c;也被称为…

基于快照行情的股票/基金 1分钟 K 线合成指南

1. 概述 由于不同交易所不同资产的交易规则是有差异的&#xff0c;导致不同交易所基于快照行情或逐笔成交合成不同资产1分钟 K 线的计算方法是不同的。 本教程旨在提高 DolphinDB 在具体业务场景下的落地效率&#xff0c;降低 DolphinDB 在实际业务使用中的开发难度。 本教程…