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流的步骤:数据源→转换 ...
随机推荐
- Apollo架构设计
Apollo架构设计 Apollo有一点很好,就是它是由国内携程团队开发,而且文档写的很全,代码也完全开源.如果去了解它也可以直接去看它的官方文档. 一.配置中心概念 1.背景 在实际开发中都会与配置 ...
- Kotlin:【继承】:继承、函数重载、类型检测、as类型转换、智能类型转换、Kotlin层次
- dart安装教程详解
官网 https://dart.dev 关于发布通道和版本字符串 Dart SDK有三个发布通道: 1==>:稳定释放,大约每三个月更新一次: 稳定释放适合生产使用. 2==>:预览发布, ...
- zos静态网站托管的使用和原理
本文分享自天翼云开发者社区<zos静态网站托管的使用和原理> 作者:Ywq zos静态网站托管是一种功能强大且方便的功能特性,此特性主要用于将静态网站的文件(例如HTML.CSS.Java ...
- 构建强大算力基础,奠定AI时代基石!
7月6日,2023世界人工智能大会在上海拉开序幕.由中国电信主办的"算网一体 融创未来"主题论坛也于当日在上海世博中心举行.上海市经济和信息化委员会副主任戎之勤.上海市金山区人民政 ...
- yum repo和rpm,添加阿里repos
RPMRPM(Red-hat Package Manager),是一个由红帽最早开发出来的包管理器,目前已经是大多数Linux发行的默认包管理器.RPM管理的包都是以.rpm结尾,其中存储了该软件的安 ...
- Scala样例类及底层实现伴生对象
package com.wyh.day01 /** * 样例类的使用 * 1.使用case修饰类 * 2.不需要写构造方法,getter,setter方法,toString方法 * 3.直接通过对象名 ...
- Top-N推荐算法 Top-N recommendation Algorithms
引言 推荐算法是计算机专业中的一种算法,通过一些计算,能够推测用户喜欢的东西,在互联网环境中应用比较广泛.Top-N算法在生活中非常常见,比如学术论文推荐论文.音乐软件推荐歌曲等. 今天看到一篇名叫& ...
- camunda工作流实战项目【PRO版】(表单设计器+流程编辑器,零代码创建流程)
pro版本主要对流程设计器.表单模块做了优化和改造,下面是各版本功能对比 一.整体情况介绍 基于ruoyi平台和camunda工作流开发而成,结合bpmn.js流程编辑器和vform表单设计器,实现常 ...
- ppt 字少怎么办
1.加图标 2.加色块 3.加图片 最终效果