java基础之Stream流
一、使用Stream的目的:用于解决已有集合类库既有的弊端,只求关注【目的】,不关注【方式】,且其数据源:可以是集合,数组等
例子:
public class NormalFilter {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
//过滤不是以“张”开头的元素
List<String> listA = new ArrayList<>();
for (String s : list) {
if(s.startsWith("张")){
listA.add(s);
}
}
System.out.println("以张开头的数组:"+listA);
//过滤元素长度等于3
List<String> listB = new ArrayList<>();
for (String s : listA) {
if(s.length()==3){
listB.add(s);
}
}
System.out.println("元素长度为:"+listB);
}
}
使用Stream简化代码
public class NormalFilter1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.stream()
.filter(name->name.startsWith("张"))
.filter(name->name.length()==3)
.forEach(System.out::println);//name-> System.out.println(name)
}
}
二、获取Stream流方式
a、所有的 Collection 集合都可以通过 stream 默认方法获取流
根据Collection获取流:
List<String> list = new ArrayList<>();
Stream<String> listStream = list.stream();
根据Map获取流:
Map<Integer,String> map = new HashMap<>();
Stream<Integer> keyStream = map.keySet().stream();
Stream<String> valuesStream = map.values().stream();
Stream<Map.Entry<Integer, String>> entryStream = map.entrySet().stream();
b、Stream 接口的静态方法 of 可以获取数组对应的流
Stream<String> stream = Stream.of(array);
三、常用的方法
逐一处理:forEach
例子:
Stream<String> stringStream = Stream.of("张无忌", "张三丰", "周芷若");
stringStream.forEach(System.out::println);
过滤:filter
判断:Predicate接口
映射:map---->需要将流中的元素映射到另一个流中
例子:
Stream<String> stringStream = Stream.of("1", "2", "3", "4");
//使用map方法,把字符串类型的整数,(映射)为Interger类型的整数
Stream<Integer> integerStream = stringStream.map(Integer::parseInt);
取用前几个:limit--->方法可以对流进行截取,只取用前n个
例子:
Stream<String> stringStream = Stream.of("张无忌", "张三丰", "周芷若");
Stream<String> limitStream = stringStream.limit(2);
limitStream.forEach(System.out::println);
合并:concat.....>如果有两个流,希望合并成为一个流
例子:
Stream<String> streamA = Stream.of("张无忌");
Stream<String> streamB = Stream.of("张翠山");
Stream<String> result = Stream.concat(streamA, streamB);
四、方法引用
例子:
例如上例中, System.out 对象中有一个重载的 println(String) 方法恰好就是我们所需要的。那么对于printString 方法的函数式接口参数,对比下面两种写法,完全等效:
Lambda表达式写法: System.out.println(stringStream.max((x,y)->Integer.compare(x,y)).get());
方法引用写法:System.out.println(stringStream.max(Integer::compare).get());
第一种语义是指:拿到参数之后经Lambda之手,继而传递给 System.out.println 方法去处理。
第二种等效写法的语义是指:直接让 System.out 中的 println 方法来取代Lambda。两种写法的执行效果完全一样,而第二种方法引用的写法复用了已有方案,更加简洁。
java基础之Stream流的更多相关文章
- Java基础(十一) Stream I/O and Files
Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...
- java中的Stream流
java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java 8创建Stream流的5种方法
不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- Java基础系列-Stream
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10748817.html 一.概述 Stream操作简称流操作,这里的流与IO流毫无关系, ...
- Java 8 (3) Stream 流 - 简介
什么是流? 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语言来表达,而不是临时编写一个实现).就现在来说你可以先把它当做是一个遍历数据集的高级迭代器.此外,流还支持并行,你 ...
- Java学习:Stream流式思想
Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...
- Java基础教程——Stream
Stream流 Java 8 API添加了一种新的机制--Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...
随机推荐
- 部署 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化
一.安装部署 1.安装 python3.11 或以上版本 2.安装browser-use pip install browser-use 3.安装 Playwright playwrigh ...
- DICOM-SCP,可以直接使用的SCP(.net framework 4.6.1以上)控制台接收端
此程序只能运行在.net framework 4.6.1版本上的环境,如果要运行在低版本环境,请看上一篇文档 using System; using System.IO; using System.T ...
- mysql数据库主从同步I/O问题修复
mysql数据库主从同步I/O问题,下面介绍比较靠谱的修复方法. 主节点IP:10.99.202.25,从节点IP:10.99.202.26,修复步骤如下: 1,查看主库repl账号访问权限 mysq ...
- Oracle 遍历游标的四种方式汇总(for、fetch、while、BULK COLLECT)
本文原创:https://www.cnblogs.com/Marydon20170307/p/12869692.html 感谢博主分享 注意:原文中方式四FORALL处有语法错误,应该使用FOR. 1 ...
- 3 x 2 + 1 !安 全 能 力 权 威 认 可 !
近日,由XOps大会组委会主办的"2024第三届XOps产业创新发展论坛"在北京召开.大会主论坛公布了2024上半年XOps最新评估结果,天翼云顺利通过ITU DevOps国际标准 ...
- Q:linux上某个磁盘挂载不上
想把新创建的 /dev/datavg/data_lv 挂载到 /mysql 目录上 mkfs -t xfs -f /dev/datavg/data_lv mount /dev/datavg/data_ ...
- 接口响应指标的p99、p95、p50到底是什么?
一.简介 我们对服务响应时间的衡量指标有Min(最小响应时间).Max(最大响应时间).Avg(平均响应时间)等,P99.P90也是衡量指标 二.指标简介 1.平均值Avg 其中比较常用的值就是平均值 ...
- Luogu P11233 CSP-S2024 染色 题解 [ 蓝 ] [ 线性 dp ] [ 前缀和优化 ]
染色:傻逼题. 赛时没切染色的都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏! 包括我. 真的太傻逼了这题. 我今晚心血来潮一打这题,随便优化一下,就 AC 了. 怎么做到这么蠢 ...
- Java中的输出格式化
在Java中,输出格式化是一个非常重要的功能,尤其是在需要精确控制输出格式的场景下. 以下是对代码中输出部分的详细解释: 原代码中的输出: System.out.printf("%.6f\n ...
- docker - [12] 镜像发布到DockerHub、阿里云
题记部分 一.镜像发布到 DockerHub 1.地址:https://hub.docker.com/ 注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交镜像 4.登录之后提交镜像即可. [ ...