Stream流入门,Stream流创建

1、什么是Stream?

*也叫Stream流,是JDK8开始新增的一套API,可以用于操作集合或者数组的数据。

*优势:

Stream流大量结合了Lambda的语法风格来编程,提供了一种更加强大也更加简单的操作集合或者数组中的数据,代码更简洁,可读性更好

体验Stream流的优点

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Stream1 {public static void main(String[] args) {List<String>list=new ArrayList<>();List<String>list1=new ArrayList<>();list.add("肖战");list.add("王一博");list.add("黄景瑜");list.add("王俊凯");list.add("易烊千玺");for (String s : list) {if (s.startsWith("王")&&s.length()==3){list1.add(s);}}System.out.println(list1);List<String>list2=list.stream().filter(s->s.startsWith("王")).filter(a->a.length()==3).collect(Collectors.toList());System.out.println(list2);}
}

Stream流的使用步骤

①数据源(集合/数组)——>获取Stream流:Stream流代表一条流水线,并能与数据源进行连接——>(过滤,排序,去重...)调用流水线的各种方法对数据进行处理——>获取结果:获取处理的结果,遍历统计收集到一个新的集合中返回。

1、获取Stream流

获取集合的Stream流

获取Collection提供的Stream流说明
default  Stream<E>stream|()获取当前对象的Stream流

获取数组的Stream流

Arrays类提供的如下方法说明
public static <T> Stream<T>stream(T  [ ] array)获取当前数组的Strweam流
Stream类提供的如下方法说明
public static <T> Stream<T>of ( T...value)获取当前数组的Strweam流
import java.util.*;
import java.util.stream.Stream;public class stream2 {public static void main(String[] args) {//如何获取list集合的Stream流List<String>list=new ArrayList<>();Collections.addAll(list,"肖战","王一博","惠英红","尔冬升","王凯");Stream<String>stream=list.stream();//如何获取Map集合的Stream流Map<String,Double>map=new HashMap<>();map.put("王健林",180.6);map.put("马云",167.6);map.put("马化腾",186.6);map.put("雷军",182.6);map.put("董明珠",168.4);Set<String>key=map.keySet();Stream<String>stream2= key.stream();Collection<Double>values=map.values();Stream<Double>stream3= values.stream();//如何获取Set集合的Stream流Set<String>set=new HashSet<>();Stream<String>stream1=set.stream();Collections.addAll(set,"肖战","王一博","惠英红","尔冬升","王凯");stream1.filter(s->s.contains("王")).forEach(s-> System.out.println(s));Set<Map.Entry<String,Double>>set1=map.entrySet();Stream<Map.Entry<String,Double>> stream4=set1.stream();stream4.filter(e->e.getKey().contains("王")).forEach(e-> System.out.println(e));//如何获取数组的Stream流String[]arr={"肖战","王一博","惠英红","尔冬升","王凯"};Stream<String>stream5=Arrays.stream(arr);Stream<String>stream6=Stream.of(arr);}
}

z、Stream流常见的中间方法

中间方法指的是调用完成后会返回新的Stream流,可以继续使用(支持链式编程)。

Stream提供的常用中间方法说明
Stream<I>sorted()对元素进行升序排序
Stream<T> filter(Predicate<? super T> predicate)用于对流中的数据进行过滤。
Stream<T> limit(long maxSize)获取前几个元素
Stream<I>sorted(Comparator<? super I>comparator)按照指定规则排序
Stream<T>skip( long n)跳过前几个元素
Stream<T>distinct()去除流中重复的元素。
<R>Stream<R> map(Function<? super T,? extends R> mapper)对元素进行加工,并返回对应的新流
static <T>Stream<T>concat(Stream a,Stream b)合并a和b两个流为一个流
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;public class Stream3 {public static void main(String[] args) {List<Double>score=new ArrayList<>();Collections.addAll(score,99.9,100.0,98.9,86.6,89.3);//需求1:找出成绩大于等于60分的数据,并升序后,再输出Stream<Double>stream=score.stream();stream.filter(s->s>=60).sorted().forEach(s-> System.out.println(s));List<Student>students=new ArrayList<>();Student s1=new Student("肖战",23,187.6);Student s2=new Student("钟汉良",47,187.5);Student s3=new Student("王一博",27,187.6);Student s4=new Student("黄景瑜",32,187.3);Collections.addAll(students,s1,s2,s3,s4);//需求2:找出年龄大于等于23,且年龄小于等于30岁的学生,并按照年龄降序输出Istudents.stream();students.stream().filter(s->s.getAge()>=23&&s.getAge()<=30).sorted((o1,o2)->o2.getAge()-o1.getAge()).forEach(s-> System.out.println(s));//需求3:取出身高最高的前3名学生,并输出.students.stream().sorted((o1,o2)->Double.compare(o2.getHeight(),o1.getHeight())).limit(3).forEach(s-> System.out.println(s));//需求4:取出身高倒数的2名学生,并输出。students.stream().sorted((o1,o2)->Double.compare(o1.getHeight(),o2.getHeight())).limit(2).forEach(s-> System.out.println(s));students.stream().sorted((o1,o2)->Double.compare(o2.getHeight(),o1.getHeight())).skip(students.size()-2).forEach(s-> System.out.println(s));//需求5:找出身高超过168的学生叫什么名字,要求去除重复的名字,再输出,
students.stream().filter(s->s.getHeight()>168).map(s->s.getName()).distinct().forEach(s-> System.out.println(s));Stream<String>stream1=Stream.of("张三","王五");Stream<String>stream2=Stream.of("张三1","王五1","李四1");Stream<String>allSet=Stream.concat(stream1,stream2);allSet.forEach(s-> System.out.println(s));}
}

3、Stream流常见的终结方法

终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了。

Stream提供的常用终结方法说明
void forEach(Consumer action)对此流运算后的元素执行遍历
long count()统计此流运算后的元素个数
Optional<I>max(Comparator<? super Icomparator)获取此流运算后的最大值元素
Optional<I>min(Comparator<?super Icomparator)获取此流运算后的最小值元素

3、Stream流常见的终结方法

收集Stream流:

就是把Stream流操作后的结果转回到集合或者数组中去返回。

Stream流:

方便操作集合/数组的手段;集合/数组:才是开发中的目的。

Stream提供的常用终结方法说明
R collect(Collector collector)把流处理后的结果收集到一个指定的集合中去
object[] toArray()把流处理后的结果收集到一个数组中去
import java.util.*;
import java.util.stream.Collectors;public class Stream4 {public static void main(String[] args) {List<Student> students=new ArrayList<>();Student s1=new Student("蜘蛛精",26, 172.5);Student s2=new Student("蜘妹精", 26, 172.5);Student s3=new Student("紫霞",23,167.60);Student s4=new Student("白品品",25,169.0);Student  s5=new Student("牛庞王",35, 183.3);Student s6=new Student("牛夫人",34, 168.5);Collections.addAll(students,s1,s2,s3,s4,s5,s6);long count=students.stream().filter(s->s.getHeight()>168).count();//需求1:请计算出身高超过168的学生有几人.//需求2:请找出身高最高的学生对象,并输出。
Student student=students.stream().max((o1, o2) -> Double.compare(o2.getHeight(),o1.getHeight())).get();System.out.println(student);//需求3:请找出身高最矮的学生对象,并输出。Student student1=students.stream().min((o1, o2) -> Double.compare(o2.getHeight(),o1.getHeight())).get();System.out.println(student1);//需求4:请找出身高超过170的学生对象,并放到一个新集合中去返回。//流只能收集一次List<Student>students1= students.stream().filter(s->s.getHeight()>170).collect(Collectors.toList());System.out.println(students1);//需求5:请找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个Map集合返回。
Map<String,Double>map=students.stream().filter(s->s.getHeight()>170).collect(Collectors.toMap(a->a.getName(), b->b.getHeight()));System.out.println(map);//Object[] arr=students.stream().filter(s->s.getHeight()>175).toArray();Student[] arr1=students.stream().filter(s->s.getHeight()>175).toArray(Student[]::new);System.out.println(Arrays.toString(arr1));}
}

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

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

相关文章

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错&#xff0c;项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

『大模型笔记』MetaGPT: 多智能体框架:首家人工智能软件公司,走向自然语言编程

MetaGPT: 多智能体框架:首家人工智能软件公司,走向自然语言编程! 文章目录 一. MetaGPT: 多智能体框架二. MetaGPT-调研员-例子『大模型笔记』AI 智能体(Agent)在推理(Reasoning)、规划(Planning)与工具调度(Tool Calling)方面的研究:综合调查!一. MetaGPT: 多智能体框架 …

10、Python:字典类型(Dictionary)

字典的定义 在Python中&#xff0c;字典是一种可变容器模型&#xff0c;且可存储任意类型对象。字典的每个元素都是一个键值对。键必须是唯一的&#xff0c;而值则不必。 # 示例&#xff1a;创建一个字典 my_dict {name: Alice, age: 25, city: New York}常见运算操作 字典…

Python 正则表达式1 函数基础

正则表达式主要函数 注&#xff1a;表达式指正则表达式&#xff0c;字符串指待处理文本。 函数名称概要re.match()匹配检查字符串是否符合表达式&#xff0c;返回Match对象re.search()搜索搜索字符串是否包含表达式&#xff0c;返回Match对象re.findall()查询查询字符串所有符…

基于alpha shapes的边缘点提取(matlab)

1、原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点&#xff0c;可快速准确提取边界点。如下图所示&#xff0c;对于任意形状的平面点云&#xff0c;若一个半径为a的圆&#xff0c;绕其进行滚动&…

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09; 目录 LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.LSTM-KDE的长短期…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库&#xff08;5&#xff09;&#xff1a;使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

机器学习:深入解析SVM的核心概念【三、核函数】

核函数 **问题一&#xff1a;为什么说是有限维就一定存在高维空间可分呢&#xff1f;**原始空间与特征空间为什么映射到高维空间可以实现可分核函数的作用 **问题二&#xff1a;最终怎么得到函数**从对偶问题到决策函数的步骤&#xff1a;结论 **问题三&#xff1a;为什么说特征…

nginx--第三方模块安装上传下载服务

第三方模块安装 准备 cd /usr/local/src/ yum install git -y git clone https://github.com/openresty/echo-nginx-module.git cd nginx-1.24.0 yum -y install perl-devel perl-ExtUtils-Embed zlib-devel gcc-c libtool openssl openssl-devel 编译安装 ./configure \--p…

ZooKeeper知识点总结及分布式锁实现

最初接触ZooKeeper是之前的一个公司的微服务项目中&#xff0c;涉及到Dubbo和ZooKeeper&#xff0c;ZooKeeper作为微服务的注册和配置中心。好了&#xff0c;开始介绍ZooKeeper了。 目录 1.ZooKeeper的基本概念 2.ZooKeeper的节点&#xff08;ZNode&#xff09; 3. ZooKeep…

机器学习之基于Tensorflow(LSTM)进行多变量时间序列预测股价

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;机器学习之基于TensorFlow&#xff08;LSTM&#xff09;进行多变量时间序列预测股价 一、项目…

Python量化炒股的获取数据函数—get_fundamentals_continuously()

Python量化炒股的获取数据函数—get_fundamentals_continuously() get_fundamentals()函数只能用于查询某一交易日的股票财务数据信息&#xff0c;如果要查询多个交易日的股票财务数据信息&#xff0c;就要使用get_fundamentals_continuously()函数&#xff0c;语法格式如下&a…

Django数据库创建存储及管理

一、什么是ORM Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。 具体来说,Django ORM提供了以下功能: 模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些…

tensorflow报错

参考 TensorFlow binary is optimized to use available CPU instructions in performance-critical operations._this tensorflow binary is optimized to use availab-CSDN博客 解决Python中cuBLAS插件无法注册问题_unable to register cudnn factory: attempting to re-CS…

45. UE5 RPG 使用元属性(Meta Attributes)以及使用Set by Caller修改伤害

在RPG游戏中&#xff0c;我们是不会直接修改生命值的属性&#xff0c;是因为在修改角色属性时&#xff0c;需要获取角色的属性并进行复杂的计算&#xff0c;所以&#xff0c;我们正常情况下使用元属性&#xff08;Meta Attributes&#xff09;作为计算的中间的媒。在服务器上先…

【讲解下如何解决一些常见的 Composer 错误】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Apache Dubbo知识点表格总结

Dubbo是一个高性能的Java RPC框架&#xff0c;它提供了一系列的功能来支持分布式系统的开发。通常用于微服务之间的服务调用&#xff0c;顺便提一下也是用于微服务之间调用的OpenFeign&#xff0c;OpenFeign是Spring Cloud体系中的一个声明式HTTP客户端&#xff0c;用于简化HTT…

Django知识点总结

因为最近在搞一个Python项目&#xff0c;使用的Django框架。所以快速学习了一下这个web框架。并做一些总结。 Django官网的介绍&#xff1a;Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experience…

Ex1-C6油气化工防爆轮式巡检机器人

Ex1系列防爆轮式巡检机器人整机采用防爆设计&#xff0c;防爆等级为Exd II CT4 Gb。机器人通过无轨3D形态导航技术&#xff0c;结合360度防爆云台和无线防爆充电桩&#xff0c;实现整套防爆标准&#xff0c;可广泛应用于石油、燃气、化工、冶金等II类爆炸环境中&#xff0c;代替…