重学java 77.JDK新特性 ③ Stream流

The road is long,it can be really hard.Whatever you do,you hold on to that foolishly hopeful smile

                                                                                                                        —— 24.6.19

Stream流

        stream流中的"流"不是特指"IO流",它是一种"流式编程"(编程方式),可以看做是"流水线

package S109Stream;import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Demo312Stream {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("张无忌");list.add("张三丰");list.add("张大彪");list.add("吕不韦");list.add("张三");list.add("赵姬");list.add("张翠山");list.add("缪毒");/*方式1:// 需求1:要筛选出姓张的人ArrayList<String> listZhang = new ArrayList<>();for (String s : list) {if (s.startsWith("张")) {listZhang.add(s);}}System.out.println(listZhang);// 需求2:筛选出姓张、姓名三个字的人ArrayList<String> listThrZhang = new ArrayList<>();for (String s : list) {if (s.startsWith("张")&&s.length()==3){listThrZhang.add(s);}}System.out.println(listThrZhang);// 需求3:遍历集合,将三个字姓张的打印出来for (String s : listThrZhang) {System.out.println(s);}*/// 方式2:将list转成stream流对象Stream<String> stream = list.stream();/*stream.filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.startsWith("张");}}).filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.length()==3;}}).forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});*/// 方式3:将list转成stream流对象,并用lambda表达式输出System.out.println("——————————————Lambda表达式——————————————");stream.filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(s -> System.out.println(s));}
}

1.Stream的获取

① 针对集合:Collection中的方法

        Stream<E> stream()

② 针对数组:Stream接口中的静态方法

        Static <T> Stream<T> of(T...values)

import java.util.ArrayList;
import java.util.stream.Stream;public class Demo313StreamGet {public static void main(String[] args) {// ① 针对集合:Collection中的方法//     Stream<E> stream()ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");Stream<String> stream = list.stream();System.out.println(stream);     // 地址值:java.util.stream.ReferencePipeline$Head@7f31245a// ② 针对数组:Stream接口中的静态方法//     Static <T> Stream<T> of(T...values)Stream<String> stream1 = Stream.of("张三","李四","王五");System.out.println(stream1);    // java.util.stream.ReferencePipeline$Head@6d6f6e28}
}

2.Stream中的方法

① forEach方法:

        void forEach(Consumer<? super T> action);

注意:forEach是一个终结方法(运行结束会自动关闭流)

import java.util.function.Consumer;
import java.util.stream.Stream;public class Demo314StreamForeach {public static void main(String[] args) {foreach();}/***  逐一处理,可以用来遍历*/private static void foreach() {Stream<String> stream1 = Stream.of("张三", "李四", "王五");
//        stream1.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });System.out.println("—————————————Lambda表达式—————————————");stream1.forEach(s -> System.out.println(s));}
}

     

② long count()方法

1.作用:统计元素个数

2.注意:count也是一个终结方法

import java.util.stream.Stream;public class Demo315StreamCount {public static void main(String[] args) {count();}/*** 统计元素个数*/private static void count() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六");long count = stream1.count();System.out.println(count);}
}

③ Stream<T> filter(Predicate<? super T>predicate)方法

1.方法:stream<T> filter(Predicate<? super T> predicate)方法,返回一个新的stream流对象

2.作用:根据某个条件进行元素过滤

import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Demo316StreamFilter {public static void main(String[] args) {filter();filter2();}private static void filter2() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");System.out.println("——————————————————lembda表达式————————————————");stream1.filter(s -> s.length() == 3).forEach(s -> System.out.println(s));}private static void filter() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");Stream<String> newStream = stream1.filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.length() == 3;}});newStream.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});}
}

④ Stream<T> limit(long maxsize)方法

        获取Stream流对象中的前n个元素,返回一个新的Stream流对象

import java.util.stream.Stream;public class Demo317StreamLimit {public static void main(String[] args) {limit();}/*** 获取前几个元素*/private static void limit() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");stream1.limit(3).forEach(s-> System.out.println(s));}
}

⑤ Stream<T> skip(long n)

        跳过stream流对象中的前n个元素,返回一个新的Stream流对象

import java.util.stream.Stream;public class Demo318StreamSkip {public static void main(String[] args) {skip();}/*** 跳过前n个元素*/private static void skip() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");stream1.skip(2).forEach(s-> System.out.print(s+" "));}
}


⑥ static<T> Stream<T> concat(Stream<? extends T> a, Stream<?extends T> b)

        两个流合成一个流

import java.util.stream.Stream;public class Demo319StreamConcat {public static void main(String[] args) {Concat();}/*** 流合并,是一个静态方法*/private static void Concat() {Stream<String> stream1 = Stream.of("张三", "李四", "王五");Stream<String> stream2 = Stream.of("赵六","马七","张晓梅","马冬梅");Stream<String> stream3 = Stream.concat(stream1, stream2);stream3.forEach(s -> System.out.print(s+" "));}
}

⑦ 将Stream流变成集合

        从stream流对象转成集合对象,使用stream接口方法collect()

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Demo320StreamCollect {public static void main(String[] args) {Collect();Collect1();}/*** 流转集合*/private static void Collect1() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");List<String> collect1 = stream1.collect(Collectors.toList());System.out.println(collect1);}private static void Collect() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六","马七","张晓梅","马冬梅");Set<String> collect = stream1.collect(Collectors.toSet());System.out.println(collect);}
}

⑧ distinct方法

Stream<T> distinct()

元素去重复,依赖hashcode和equals方法

Person类

import java.util.Objects;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
import java.util.stream.Stream;public class Demo321StreamDistinct {public static void main(String[] args) {distinct();}/*** 去重复元素的* 被去重的元素底层需要重写hashcode和equals方法*/private static void distinct() {Stream<String> stream1 = Stream.of("张三", "李四", "王五", "张三","张晓梅","赵六","马七","张晓梅","马冬梅");stream1.distinct().forEach(s->System.out.print(s+" "));System.out.println();Stream<Person> stream2 = Stream.of(new Person("张三",10),new Person("李四",12),new Person("张三",10));stream2.distinct().forEach(person->System.out.print(person+" "));}
}

⑨ 转换流中的类型

Stream<R> map(Function<T,R> mapper) —> 转换流中的数据类型

import java.util.function.Function;
import java.util.stream.Stream;public class Demo322StreamMap {public static void main(String[] args) {map();}/*** 转换流中的类型*/private static void map() {Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9);stream.map(new Function<Integer, String>() {@Overridepublic String apply(Integer integer) {return integer.toString();}}).forEach(s -> System.out.println(s+1));}
}

⑩ Stream流练习

1.第一个队伍只要名字为3个字的成员姓名;——filter
2.第一个队伍筛选之后只要前3个人;——limit
3.第二个队伍只要姓张的成员姓名;——filter
4.第二个队伍筛选之后不要前2个人;——skip
5.将两个队伍合并为一个队伍;——concat
6.打印整个队伍的姓名信息。——forEach

import java.util.ArrayList;
import java.util.stream.Stream;public class Demo323StreamPractice {public static void main(String[] args) {ArrayList<String> one = new ArrayList<>();one.add("迪丽热巴");one.add("宋远桥");one.add("苏星河");one.add("老于");one.add("庄于");one.add("孙子");one.add("洪七公");ArrayList<String> two =new ArrayList<>();two.add("古力娜扎");two.add("张无忌");two.add("张三丰");two.add("赵丽颖");two.add("张二狗");two.add("张天爱");two.add("张三");// 将两个集合变成Stream流Stream<String> teamA = one.stream();Stream<String> teamB = two.stream();/*** 1.第一个队伍只要名字为3个字的成员姓名;——filter* 2.第一个队伍筛选之后只要前3个人;——limit* 3.第二个队伍只要姓张的成员姓名;——filter* 4.第二个队伍筛选之后不要前2个人;——skip* 5.将两个队伍合并为一个队伍;——concat* 6.打印整个队伍的姓名信息。——forEach*/Stream<String> listA = teamA.filter(s -> s.length() == 3).limit(3);Stream<String> listB = teamB.filter(s -> s.startsWith("张")).skip(2);Stream.concat(listA, listB).forEach(s -> System.out.println(s));}
}

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

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

相关文章

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

react使用OpenLayers实现类似船某网在地图放大时展示具体船舶符号缩小时显示聚合小点效果

一、效果 如图所示&#xff0c;地图缩小&#xff08;即比例尺放大&#xff09;时&#xff0c;显示聚合小绿点&#xff1b; 地图放大&#xff08;比例尺缩小&#xff09;时&#xff0c;展示具体船舶符号&#xff1a; 二、思路 1&#xff09;设置2个图层&#xff0c;一个展示…

计网重点面试题-TCP三次握手四次挥手

三次握手 第一次握手(syn1) 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号置于 TCP 首部的「序列号」字段中&#xff0c;同时把 SYN 标志位置为 1&#xff0c;表示 SYN 报文。接着把第一个 SYN 报文发送给服务端&#xff0c;表示向服务端发…

Microsoft Edge 查看已保存账号的密码

1、打开更多菜单选项 打开浏览器右上角的“...”设置及其他&#xff0c;快捷键&#xff1a;ALTF。 2、打开设置选项 选择“设置”&#xff0c;快捷键&#xff1a;g 3、点击密码 在“个人资料”选项中找到密码选项 4、电子钱包 电子钱包会显示“站点和应用”所保存的账户信息…

JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言 在上一节中&#xff0c;我们简单介绍了 TCP 协议的相关概念和格式&#xff0c;而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制&#xff0c;在本节中我们将会继续介绍 TCP协议原理中的其他机制。 连接管理机制&#xff08;安全机制&#xff09; 在正常情况下&…

lvgl的应用:移植MusicPlayer(基于STM32F407)

目录 概述 1 软硬件环境 1.1 UI开发版本 1.2 MCU开发环境 1.3 注意点 2 GUI Guider开发UI 2.1 使用GUI Guider创建UI 2.2 GUI Guider编译项目和测试 2.2.1 GUI Guider编译项目 2.2.2 编译 2.3 了解GUI Guider生成代码 3 移植项目 3.1 Keil中加载代码 3.2 调用G…

漏洞挖掘 | 记一次src挖掘-小程序敏感信息泄露

权当是一次漏洞挖掘的思路分享 闲言 就现在的一个web漏洞挖掘强度还是非常高的&#xff0c;所以我们不妨把我们的眼光投向一个之前可能未曾涉及到的区域———小程序 是的微信小程序&#xff0c;这玩意的防范能力和过滤能力其实对比web方向是要弱小很多的 进入正题 以下就是…

Javase.抽象类和接口

抽象类和接口 【本节目标】1.抽象类1.1抽象类的概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 2. 接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 接口使用实例2.8Clonable 接口和深拷贝2.9 抽象类和接口的区别 3. Object类…

GT_BERT文本分类

目录 GT-BERT结束语代码实现整个项目源码&#xff08;数据集模型&#xff09; GT-BERT 在为了使 BERT 模型能够得到广泛的应用,在保证模型分类准确率不降低的情况下,减少模型参数规模并降低时间复杂度,提出一种基于半监督生成对抗网络与 BERT 的文本分类模型 GT-BERT。模型的整…

【ajax基础04】form-serialize插件

目录 一&#xff1a;form-serialize插件 作用&#xff1a; 语法格式&#xff1a; 一&#xff1a;form-serialize插件 作用&#xff1a; 快速且大量的收集表单元素的值 例如上图对于多表单元素的情形&#xff0c;单靠通过”选择器获取节点.value”值的形式&#xff0c;获取…

使用 GCD 实现属性的多读单写

使用 Grand Central Dispatch (GCD) 实现多读单写的属性 首先需要确保在多线程环境下的线程安全性。可以使用 GCD 提供的读写锁机制 dispatch_rwlock_t 或者 dispatch_queue_t 来实现这个功能。 Swift版本的实现 怎样创建一个并发队列 &#xff1f;// 使用 Swift 来实现的首…

.net 奇葩问题调试经历之1——在红外相机获取温度时异常

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔序言 我们在研发中,经常除了造产品…

吉时利Keithley2602B数字源表

吉时利Keithley2602B数字源表 2601B、2602B、2604B 系统 Sourcemeter SMU 仪器 2601B、2602B 和 2604B 系统 Sourcemeter SMU 仪器为 40W DC / 200W 脉冲 SMU&#xff0c;支持 10A 脉冲&#xff0c;3A 至 100fA 和 40V 至 100nV DC。它们将精密电源、实际电流源、6 位数字万用…

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错:asyncio.exceptions.TimeoutError

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错&#xff1a;asyncio.exceptions.TimeoutError 报错信息如下&#xff1a; Traceback (most recent call last): asyncio.run(main()) File “D:\miniconda3\envs\py31013\lib\asyncio\runners.py”, line 44, in…

反激开关电源整流桥选型及计算

整流桥的作用就是把输入交流电压整形成直流电压&#xff0c;把正弦波整成馒头波&#xff0c;由于整流管的单向导电 性&#xff0c;在输入电压瞬时值小于滤波电容上电压时整流桥&#xff0c;在这个时候是不导通的&#xff0c;使整流桥的电流变 成2-3ms左右的窄脉冲。为获得所需…

【数据结构】选择题

在数据结构中&#xff0c;从逻辑上可以把数据结构分为&#xff08;线性结构和非线性结构&#xff09; 当输入规模为n时&#xff0c;下列算法渐进复杂性中最低的是&#xff08;&#xff09; 时间复杂度 某线性表采用顺序存储结构&#xff0c;每个元素占4个存储单元&#xf…

13.3 Go 性能优化

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【MAVEN学习 | 第1篇】Maven介绍与安装

文章目录 前言 一. Maven主要作用1.1 依赖管理1.2 项目构建 二. Maven安装和配置2.1 安装2.2 配置环境变量2.3 命令测试2.4 配置文件&#xff08;1&#xff09;依赖本地缓存位置&#xff08;本地仓库位置&#xff09;&#xff08;2&#xff09;配置国内阿里镜像&#xff08;3&a…

WPS相同字体但是部分文字样式不一样解决办法

如下图&#xff0c;在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪&#xff0c;但是把鼠标移到这个文字的位置&#xff0c;发现它和其他正常文字的字体是一样的&#xff0c;都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…

【启明智显产品介绍】工业级HMI芯片Model3芯片详解(二)图像显示

Model3芯片是一款集大容量存储、宽温操作范围及多功能接口于一身的MCU&#xff0c;配备了 2D 图像加速引擎和 PNG 解码/JPEG 编解码引擎&#xff0c;可以满足各类交互设计场景和多媒体互动需求&#xff0c;具有高可靠性、高安全性、高开放度的特点&#xff0c;可以面向于泛工业…