一、使用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流的更多相关文章

  1. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

  2. java中的Stream流

    java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...

  3. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  4. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  5. Java 8创建Stream流的5种方法

    不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...

  6. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  7. Java基础系列-Stream

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10748817.html 一.概述 Stream操作简称流操作,这里的流与IO流毫无关系, ...

  8. Java 8 (3) Stream 流 - 简介

    什么是流? 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语言来表达,而不是临时编写一个实现).就现在来说你可以先把它当做是一个遍历数据集的高级迭代器.此外,流还支持并行,你 ...

  9. Java学习:Stream流式思想

    Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...

  10. Java基础教程——Stream

    Stream流 Java 8 API添加了一种新的机制--Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...

随机推荐

  1. GMP大数库

    GMP大数库学习 了解 大数库 在网络安全技术领域中各种加密算法的软件实现始终有一个共同话题是如何在普通的PC机上实现大数运算.普通的PC机内部字长最多时32位或64位,但各种加密算法中为了达到一定安 ...

  2. 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5

    上个月极低的价格得到一台CR6606和一台CR6609, 一直没时间研究, 终于趁春节假期把这两个都刷成 OpenWRT 配置说明 CPU: MT7621AT,双核880MHz 内存: NT5CC12 ...

  3. 使用Shell工具连接Kali Linux

    使用Shell工具连接Kali Linux 允许root用户登录ssh服务 1.使用命令 vim /etc/ssh/sshd_config 打开SSH的配置文件 2.将33行的 prohibit-pa ...

  4. Linux网络优化踩坑net.ipv4.tcp_tw_recycle

    一.背景 来源于埋点上报服务,埋点上报服务是用户打开APP后点击.浏览.曝光等数据都会上报到埋点服务,收集数据后用来公司运营. 本次踩坑来源于监控到上课高峰期net.sockets.tcp.timew ...

  5. 配置Slf4j

    1.maven添加 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...

  6. Atcoder ABC216G 01Sequence 题解 [ 蓝 ] [ 差分约束 ]

    01Sequence:比较板的差分约束,但有一个很妙的转化. 朴素差分约束 设 \(x_i\) 表示第 \(i\) 位的前缀和. 我们要最小化 \(1\) 的个数,就要求最小解,就要求最长路.因为约束 ...

  7. DexExpress Wpf BackstageItemWithImage

    参考链接: https://docs.devexpress.com/WPF/DevExpress.Xpf.Ribbon.BackstageItemWithImage.GlyphStyle 设置 Bac ...

  8. 如何在 CentOS 7 linux上安装和使用 FFmpeg

    SSH首选FinalShell 1.下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-5.1.tar.gz tar -zxvf ffmpeg-5.1.ta ...

  9. 附039.Kubernetes_v1.32.2高可用部署架构二

    部署组件 该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm .kubelet .kubectl. kubeadm介绍 Kubeadm 为构建 Kubernete ...

  10. Git - 安装Git

    下载>> 安装 >> 下载 登录Git官网:https://git-scm.com/ 点击想要安装的版本 安装 1. 点击下一步(Next) 2. 选择安装路径 3. Git相 ...