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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch因nn.Parameter导致实验不可复现的一种情况

文章首发见博客&#xff1a;https://mwhls.top/4871.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议&#xff0c;私信不回。 没解决&#xff0c;只是记录这种情况。 也可以多次实验取均值以避免结果复现。 场景 自己的模块中&a…

Hadoop2.0探讨

文章目录 8. Hadoop 再探讨8.1 Hadoop的优化与发展8.2 HDFS 的FA和Federation(Hadoop2.0新特性)8.2.1 HDFS HA8.2.2 HDFS Federation 8.3 YARN8.3.1 MapReduce1.0的缺陷8.3.2 Yarn设计思路8.3.3 Yarn体系结构8.3.4 Yarn工作流程8.3.5 Yarn框架和MapReduce1.0框架对比分析8.3.6 …

#力扣:206. 反转链表@FDDLC

206. 反转链表 一、Java class Solution {public ListNode reverseList(ListNode head) {if (head null) return null;ListNode pre null, cur head, next head.next;while (next ! null) {cur.next pre;pre cur;cur next;next cur.next;}cur.next pre;return cur;}…

〖程序员的自我修养 - 认知剖析篇⑤〗- 选择前端还是后端?

人之所以会觉得迷茫,本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考与认知能力。 说明:该文属于 程序员的自我修养 专栏,购买任意白宝书体系化专栏可加入易编程社区,早鸟价订阅模式除外。福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读…

【Java 进阶篇】CSS 选择器详解

CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页上元素样式的语言。要想有效地使用CSS&#xff0c;了解CSS选择器是至关重要的&#xff0c;因为它们允许你选择要应用样式的HTML元素。在本文中&#xff0c;我们将详细介绍CSS选择器的各种类型和用法&#xff0c;以便你…

Vue中使用Echarts封装为公用组件(简单复制粘贴)

Vue中封装Echarts组件 前提直奔主题 本文以Vue3代码演示 Vue2同理 前提 中文官网&#xff1a; https://echarts.apache.org/zh/index.html npm安装Echarts npm install echarts or pnpm install echarts or yarn add echarts直奔主题 创建Echarts.vue文件&#xff0c;代码如…

2_dataset, dataloader

dataset, dataloader torchvision.datasets里面集成了一些常见的数据集,例如MNIST和CIFAR10 1) Dataset 以MNIST为例,其使用方式如下 import torch import torchvision from torchvision import transformstrain_dataset = torchvision.datasets.MNIST(root=../data,trai…

Solidity 合约漏洞,价值 38BNB 漏洞分析

Solidity 合约漏洞&#xff0c;价值 38BNB 漏洞分析 1. 漏洞简介 https://twitter.com/NumenAlert/status/1626447469361102850 https://twitter.com/bbbb/status/1626392605264351235 2. 相关地址或交易 攻击交易&#xff1a; https://bscscan.com/tx/0x146586f05a451313…

Unity官方文档中关于内存管理的翻译(2021.3)

原文:Memory in Unity - Unity 手册 Unity内存管理 为了确保您的应用程序运行时没有性能问题&#xff0c;了解Unity如何使用和分配内存非常重要。本文档的这一部分解释了Unity中内存是如何工作的&#xff0c;适用于希望了解如何提高应用程序内存性能的读者。 Unity使用三个内…

视频答题猜歌闯关娱乐微信小程序源码支持看视频答题闯关听歌猜歌答题流量主模式(团队奖励等)

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载 后台管理资源本地化带数据和视频教程&#xff0c;这是一款拥有后端的闯关娱乐小程序。 支持个人小程序和企业小程序上线运营 功能强大齐全,带数据本地化 (数据在自己服务器自己管理无需担心第三方失效的问题) 支持看视…

深度学习常用脚本总结

&#x1f468;‍&#x1f4bb;个人简介&#xff1a; 深度学习图像领域工作者 &#x1f389;工作总结链接&#xff1a;https://blog.csdn.net/qq_28949847/article/details/128552785 链接中主要是个人工作的总结&#xff0c;每个链接都是一些常用demo&#xff0c…

【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)

目录 前言 七、指针 7.1~3 指针与变量、指针操作、指向指针的指针 7.4 指针与数组 7.4.1 用指针标识数组 7.4.2 应注意的问题 a. 数组名是指针常量 b. 指针变量的当前值 c. 数组超界 7.4.3 多维数组与指针 7.4.4 指针数组 a. 指针数组 b. 数组指针 c. 对比总结 前…

Reactor网络模式

文章目录 1. 关于Reactor模式的了解2. 基于Reactor模式实现epoll ET服务器2.1 EventItem类的实现2.2 Reactor类的实现Dispatcher函数AddEvent函数DelEvent函数EnableReadWrite函数 2.3 四个回调函数的实现acceptor回调函数recver回调函数sender回调函数errorer回调函数 3. epol…

突破封锁|华为芯片10年进化史:从K3V1到麒麟9000S

华为海思麒麟芯片过去10年研发历程回顾如下&#xff1a; 2009年&#xff1a;华为推出第一款手机芯片K3V1&#xff0c;采用65nm工艺制程&#xff0c;基于ARM11架构&#xff0c;主频600MHz&#xff0c;支持WCDMA/GSM双模网络。这款芯片搭载在华为U8800手机上&#xff0c;标志着华…

在SOLIDWORKS搭建一个简易的履带式机器人

文章目录 前言一、构建模型基本单元二、搭建车体模块三.插入轮子4.构建履带 前言 趁着十一假期&#xff0c;在solidworks中搭建了一个履带式机器人小车&#xff0c;计划将其应用在gazebo中完成多机器人编队的仿真。 一、构建模型基本单元 构建底板&#xff08;a面&#xff09…

面试总结-Redis篇章(十二)——Redis是单线程的,为什么还那么快

Redis是单线程的&#xff0c;为什么还那么快 Redis是单线程的&#xff0c;为什么还那么快什么是IO多路复用 阻塞IO非阻塞IOIO多路复用 Redis是单线程的&#xff0c;为什么还那么快 Redis是纯内存操作&#xff0c;执行速度非常快采用单线程&#xff0c;避免不必要的上下文切换可…

Python中套接字实现服务端和客户端3-3

3 创建客户端的步骤 创建客户端的步骤如图5所示。 图5 创建客户端的步骤 从图5可以看出&#xff0c;对于客户端来说&#xff0c;首先创建套接字&#xff0c;之后通过创建的套接字去连接服务端&#xff0c;如果连接成功&#xff0c;则继续通过该套接字向服务端发送数据&#x…

【Mybatis源码】IDEA中Mybatis源码环境搭建

一、Mybatis源码源 在github中找到Mybatis源码地址&#xff1a;https://github.com/mybatis/mybatis-3 找到Mybatis git地址 二、IDEA导入Mybatis源码 点击Clone下载Mybatis源码 三、选择Mybatis分支 选择Mybatis分支&#xff0c;这里我选择的是3.4.x分支

【ChatGPT】无需代理使用ChatGPT

推荐一个无需代理、可以直接使用的、免费的、无需客户端的、稳定的ChatGPT终端 支持GPT-3.5和CPT-4 无需境外手机号 该工具比较稳定&#xff0c;断流情况很少 GPTDOS 注册地址&#xff1a;GPTDOS &#xff08;使用我的邀请链接进行注册&#xff0c;双方都可以得到50000个toke…

Vue3 编译原理

文章目录 一、编译流程1. 解读入口文件 packgages/vue/index.ts2. compile函数的运行流程 二、AST 解析器1. ast 的生成2. 创建ast的根节点3. 解析子节点 parseChildren&#xff08;关键&#xff09;4. 解析模版元素 Element模版元素解析-举例分析 一、编译流程 1. 解读入口文…