当前位置: 首页 > news >正文

java学习--day24(stream流)

文章目录

      • 今天的内容
      • 1.Stream【难点】
        • 1.1获取流的对象
        • 1.2Stream流对象下面
          • 1.2.1count和forEach
          • 1.2.2filter方法
          • 1.2.3limit
          • 1.2.4map方法
          • 1.2.5skip
          • 1.2.6concat
        • 1.3收集流

1.基于接口和抽象类的匿名内部类的写法

abstract class Person {public abstract void eat();
}
public static void main (String[] args) {Person person = new Person () {public void eat () {sout();}};person.eat();
}

2.接口和抽象类的区别

3.throw和throws区别
4.final和finally的区别
5.书写单例模式
6.序列化和反序列化的概念

今天的内容

1.Stream流

2.水果管理系统

1.Stream【难点】

Stream解决集合类库现有的弊端

先在有一个需求:

​ 将list集合中姓张的名字元素过滤到新的集合中

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;public class Demo1 {public static void main(String[] args) {//将list集合中姓张的名字元素过滤到新的集合中List<String> list = new ArrayList<>();list.add("张三");list.add("张小三");list.add("李四");list.add("王五");list.add("张大山");//新建一个新的集合用来存姓张的元素List<String> list1 = new ArrayList<>();for (String s : list) {if (s.startsWith("张")) {list1.add(s);}}System.out.println(list1);System.out.println("=======");//如果使用sytream流操作//将集合对象转换成流对象list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.startsWith("张");}}).forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});}
}
1.1获取流的对象

根据集合获取流,将集合中的数据变成流的形式

Collection接口下面的方法 streram();

1.根据List获取流对象

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class Demo2 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("老邢");strings.add("老邢xiao");strings.add("xiao邢");strings.add("xiao老邢");//获取流对象Stream<String> stream = strings.stream();System.out.println(stream);}
}

2.set也可以获取stream对象

package com.qfedu.a_stream;import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;public class Demo3 {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("嘻嘻");set.add("哈哈");Stream<String> stream = set.stream();System.out.println(stream);}
}

3.根据map集合获取流对象

package com.qfedu.a_stream;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;public class Demo4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("1", "李四");map.put("2", "张三");//先获取键Set<String> strings = map.keySet();Stream<String> stream = strings.stream();//获取值Collection<String> values = map.values();Stream<String> stream1 = values.stream();//Set<Map.Entry<String, String>> entries = map.entrySet();Stream<Map.Entry<String, String>> stream2 = entries.stream();}
}
1.2Stream流对象下面

流就是集合中的数据,方法对集合中进行操作的

方法的名称方法的作用方法种类是否支持链式操作
count统计个数终结方法
forEach逐个处理数据终结方法
filter过滤数据函数的拼接
limit取前几个函数的拼接
skip跳过前几个函数的拼接
map映射函数的拼接
concat拼接函数的拼接

方法种类:

​ 终结方法:对流操作的时候,链式操作的时候一定是写在最后的

​ 函数拼接:方法还可以接着写方法

工厂的流水线:先造手机电池-》再造手机的主板-》造手机端额外壳-》一个成品

1.2.1count和forEach

count:统计流中的元素的个数

forEach:遍历数据的

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;public class Demo5 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");strings.add("lisi李四");long count = strings.stream().count();System.out.println(count);//4strings.stream().forEach(s->System.out.println(s));}
}
1.2.2filter方法
Stream<T>filter(Predicate<? super T> predicate)返回由与此给定谓词匹配的此流的元素组成的流。
Predicate是一个判断接口,咱们可以写一写返回值是boolean类型
package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;public class Demo6 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");strings.add("lisi李四");//filter 看数据流,如果返回的是一个true 就把它留到流中。如果是一个false就把从流中踢出去strings.stream().filter(s->s.endsWith("三")).forEach(s-> System.out.println(s));}
}
1.2.3limit

限制,取集合中前几个值

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;public class Demo7 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");strings.add("lisi李四");strings.add("老王");strings.add("老王八");strings.add("小王八");//找出前4个元素带有老的元素//strings.stream().limit(4).forEach(s-> System.out.println(s));strings.stream().limit(4).filter(s->s.contains("老")).forEach(s-> System.out.println(s));}
}
1.2.4map方法

用来映射关系

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;public class Demo8 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("11");list.add("12");list.add("13");list.add("14");//将集合中集合中字符串转为int类型的数据打印
//        for (String s : list) {
//            System.out.println(Integer.parseInt(s));
//        }list.stream().map(s -> Integer.parseInt(s)).forEach(s-> System.out.println(s));list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s);}}).forEach(new Consumer<Integer>() {@Overridepublic void accept(Integer s) {System.out.println(s);}});}
}
1.2.5skip

跳过前几个,取m面的数据

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;public class Demo9 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");strings.add("lisi李四");strings.add("老王");strings.add("老王八");strings.add("小王八");strings.stream().skip(3).forEach(s-> System.out.println(s));}
}
1.2.6concat

合并两个流

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class Demo10 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");List<String> strings1 = new ArrayList<>();strings1.add("香蕉");strings1.add("菠萝");strings1.add("西瓜");strings1.add("葡萄");//先变成流,然后再合并Stream<String> stream = strings.stream();Stream<String> stream1 = strings1.stream();Stream<String> concat = Stream.concat(stream, stream1);concat.forEach(s-> System.out.println(s));}
}
1.3收集流

将流转为集合

toList();将流转为list集合

toSet();将流转为set集合

package com.qfedu.a_stream;import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Demo11 {public static void main(String[] args) {List<String> strings = new ArrayList<>();strings.add("张三");strings.add("张三三");strings.add("李四");strings.add("lisi李四");strings.add("老王");strings.add("老王八");strings.add("小王八");Stream<String> stream = strings.stream();List<String> collect = stream.collect(Collectors.toList());//Set<String> collect1 = stream.collect(Collectors.toSet());System.out.println(collect);}
}

相关文章:

java学习--day24(stream流)

文章目录 今天的内容1.Stream【难点】1.1获取流的对象1.2Stream流对象下面1.2.1count和forEach1.2.2filter方法1.2.3limit1.2.4map方法1.2.5skip1.2.6concat 1.3收集流 1.基于接口和抽象类的匿名内部类的写法 abstract class Person {public abstract void eat(); } public sta…...

Multi-Grade Deep Learning for Partial Differential Equations

论文阅读&#xff1a;Multi-Grade Deep Learning for Partial Differential Equations with Applications to the Burgers Equation Multi-Grade Deep Learning for Partial Differential Equations with Applications to the Burgers Equation符号定义偏微分方程定义FNN定义PI…...

Docker部署rustdesk

查看镜像版本 https://hub.docker.com/r/rustdesk/rustdesk-server/tags 拉取镜像 docker pull rustdesk/rustdesk-server:1.1.8-2创建挂载目录 mkdir -p /opt/rustdesk/{hbbr,hbbs}/root运行hbbs –nethost 仅适用于 Linux&#xff0c;它让 hbbs/hbbr 可以看到对方真实的…...

win1011安装MG-SOFT+MIB+Browser+v10b

文章目录 安装MG-SOFTSNMP服务配置安装MG-SOFT启动MIB-Browser以及错误解决MIB Browser使用 安装MG-SOFT win10和win11安装基本一样&#xff0c;所以参照下面的操作即可&#xff01; SNMP服务配置 打开设置&#xff0c;应用和功能&#xff0c;可选功能&#xff0c;选择添加功…...

PCL点云处理之Pcd文件读取、法线与曲率计算、多线程加速、属性字段合并 (二百零八)

PCL点云处理之Pcd文件读取、法线与曲率计算、多线程加速、属性字段合并(二百零八) 一、相关介绍二、算法实现1.代码一、相关介绍 (夜深人不静) 法线和曲率的计算是点云处理中常用的关键特征,PCL提供了特有的点类型PointNormal来记录这些信息,通过OMP多线程对相关的计算函…...

JavaEE-文件IO操作

构造方法 一般方法&#xff0c;有很多&#xff0c;我们以下只是列举几个经常使用的 注意在上述的操作过程中&#xff0c;无论是绝对路径下的这个文件还是相对路径下的这个文件&#xff0c;都是不存在的 Reader 使用 --> 文本文件 FileReader类所涉及到的一些方法 Fil…...

二蛋赠书四期:《Go编程进阶实战:开发命令行应用、HTTP应用和gRPC应用》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…...

MySQL数据库基本操作-DQL-排序查询

介绍 如果我们需要对读取的数据进行排序&#xff0c;我们就可以使用 MySQL 的 order by 子句来设定你想按哪个字段哪种方式来进行排序&#xff0c;再返回搜索结果。 语法 select 字段名1&#xff0c;字段名2&#xff0c;…… from 表名 order by 字段名1 [asc|desc]&#xf…...

这是一篇测试文章

这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章这是一篇测试文章…...

Ubuntu plt画图 新罗马字体网格marker刻度朝内

* 字体文件&#xff1a;坚果云下code包&#xff0c;新罗马字体 参考链接&#xff1a;Linux下Matplotlib画图New Times Roman字体设置 - 知乎 * 刻度朝内 plt.rcParams[font.sans-serif] [Times New Roman]plt.rcParams[xtick.direction]in#设置x轴刻度向内plt.rcParams[ytic…...

flutter布局中的一些细节

前言 记录flutter使用中遇到的一些细节和坑&#xff0c;希望能帮助到大家 Column中不能直接嵌套ListView, &#xff08;需要指定ListView的高度或者加上shrinkWrap: true属性&#xff09;需要限制button的大小&#xff0c;可以在外部嵌套一个Container或SizedBox来限制在List…...

论文解析——AMD EPYC和Ryzen处理器系列的开创性的chiplet技术和设计

ISCA 2021 摘要 本文详细解释了推动AMD使用chiplet技术的挑战&#xff0c;产品开发的技术方案&#xff0c;以及如何将chiplet技术从单处理器扩展到多个产品系列。 正文 这些年在将SoC划分成多个die方面有一系列研究&#xff0c;MCM的概念也在不断更新&#xff0c;AMD吸收了…...

第二证券:汽车产业链股活跃,恒勃股份、博俊科技“20cm”涨停

轿车产业链股9日盘中走势活跃&#xff0c;截至发稿&#xff0c;恒勃股份、博俊科技“20cm”涨停&#xff0c;德迈仕涨超17%&#xff0c;上声电子涨超14%&#xff0c;川环科技涨超10%&#xff0c;圣龙股份、科华控股、沪光股份、上海沿浦、日盈电子、赛力斯等均涨停。 工作方面…...

孙帅Spring源码

【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】...

jenkins工具系列 —— 插件 使用Changelog获取commit记录

文章目录 安装changelog插件重启jenkins配置 ChangelogExecute shell 使用 changelog邮件中html格式也可以使用构建测试&#xff08;查看构建项 -> 控制台输出&#xff09; 安装changelog插件 插件文件可通过 V 获取 点击 左侧的 Manage Jenkins —> Plugins ——> …...

【JavaScript】浅拷贝与深拷贝

引言 浅拷贝、深拷贝是对引用类型而言的。 引用类型的变量对应一个栈区地址&#xff0c;这个栈区地址处存储的值是存放的真正的数据的堆区地址。 基本数据类型的变量也对应一个栈区地址&#xff0c;但是该地址存储的是其真正的值。 let a b发生了什么&#xff1f; let obj…...

如何下载IEEE Journal/Conference/Magazine的LaTeX/Word模板

当你准备撰写一篇学术论文或会议论文时&#xff0c;使用IEEE&#xff08;电气和电子工程师协会&#xff09;的LaTeX或Word模板是一种非常有效的方式&#xff0c;它可以帮助你确保你的文稿符合IEEE出版的要求。无论你是一名研究生生或一名资深学者&#xff0c;本教程将向你介绍如…...

nvidia 驱动问题

https://stackoverflow.com/questions/43022843/nvidia-nvml-driver-library-version-mismatch https://zhuanlan.zhihu.com/p/643773939...

PDF编辑和OCR文字识别工具ABBYY FineReader PDF

ABBYY FineReader PDF是一款专业的OCR文字识别和PDF编辑工具&#xff0c;可以帮助用户更好地处理和管理PDF文档。以下是ABBYY FineReader PDF的一些特点&#xff1a; 1. 文字识别精准&#xff1a;ABBYY FineReader PDF具有强大的OCR文字识别功能&#xff0c;可以将PDF中的文字…...

什么是网络流量监控

随着许多服务迁移到云&#xff0c;网络基础架构的维护变得复杂。虽然云采用在生产力方面是有利的&#xff0c;但它也可能让位于未经授权的访问&#xff0c;使 IT 系统容易受到安全攻击。 为了确保其网络的安全性和平稳的性能&#xff0c;IT 管理员需要监控用户访问的每个链接以…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...