Stream流

Java 8 API添加了一种新的机制——Stream(流)。Stream和IO流不是一回事。

  • 流式思想:像生产流水线一样,一个操作接一个操作。
  • 使用Stream流的步骤:数据源→转换成流→操作1→操作2→……
  • 数据源(source):可以是集合、数组等。

Stream操作有两个基础特征:

  1. Pipelining(流水线):流操作会返回流对象(新的对象),以便后续继续进行流操作。
  2. 内部迭代:不需要像for循环或Iterator一样进行显式的迭代。

遍历及过滤集合中的元素

使用传统方式遍历及过滤集合中的元素

 import java.util.ArrayList;
import java.util.List; /*
* 使用 传统方式 遍历 及 过滤 集合
* 需求 :
* 1、第一步过滤,只需要 以 “张” 开头的名字
* 2、第二步过滤只需要 ,名字长度为 2 的名字
* */
public class Test01Stream { public static void main(String[] args) {
// 创建一个集合 List , 存储姓名 并根据要求 进行过滤
List<String> nameList = new ArrayList<>();
nameList.add("张三");
nameList.add("李四");
nameList.add("王五");
nameList.add("赵六");
nameList.add("田七");
nameList.add("王八");
nameList.add("张四");
nameList.add("张三丰"); // 使用传统方式进行过滤 // 1、第一步过滤,只需要 以张开头的名字 // 需要 创建一个新的集合 对 第一次过滤之后的 姓名 进行存储
List<String> listA = new ArrayList<>();
for (String s : nameList) { //使用增强 for 循环 对 集合进行遍历
if (s.startsWith("张")) {
listA.add(s);//将过滤后的结果 添加到新的集合中
}
} List<String> listB = new ArrayList<>();
for (String s : listA) {
if (s.length() == 2) {
listB.add(s);
}
} for (String s : listB) {
System.out.print(s + " ");// 最终过滤结果 张三 张四
}
}
}

使用使用Stream流的方式遍历及过滤集合中的元素

 import java.util.ArrayList;
import java.util.List; /*
* 使用Stream流的方式 遍历 并 过滤集合
* 需求 :
1、第一步过滤,只需要 以 “张” 开头的名字
2、第二步过滤只需要 ,名字长度为 2 的名字
* */
public class Test02Stream { public static void main(String[] args) {
// 创建一个集合 List , 存储姓名 并根据要求 进行过滤
List<String> nameList = new ArrayList<>();
nameList.add("张三");
nameList.add("李四");
nameList.add("王五");
nameList.add("赵六");
nameList.add("田七");
nameList.add("王八");
nameList.add("张四");
nameList.add("张三丰"); // 使用 Stream 流的方式 ,对集合进行遍历,并过滤
// 1、第一步过滤,只需要 以 “张” 开头的名字 // 将集合转换为 Stream流, 直接调用Collection接口的一个默认方法 stream
nameList.stream().filter(s->s.startsWith("张"))
.filter(s->s.length()==2)
.forEach(s-> System.out.print(s+" "));// 输出结果 : 张三 张四
}
}

Java学习:Stream流式思想的更多相关文章

  1. Java的Stream流式操作

    前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什 ...

  2. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  3. Java8新特性 Stream流式思想(一)

    遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...

  4. Java8新特性 Stream流式思想(三)

    Stream接口中的常用方法 forEach()方法package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods; import jav ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_3_流式思想概述

  6. Java流式思想和方法引用

    目录 Java流式思想和方法引用 1. Stream流 1.1 概述 传统集合的多步遍历代码 Stream的更优写法 1.2 流式思想的概述 1.3 获取流 1.4 常用方法 ①逐一处理:forEac ...

  7. 流式思想概述和两种获取Stream流的方式

    流式思想概述 整体来看,流式思想类似于工厂车间的生产流水线 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个模型步骤方案,然后再按照方法去执行他 这张图中展示 ...

  8. 第46天学习打卡(四大函数式接口 Stream流式计算 ForkJoin 异步回调 JMM Volatile)

    小结与扩展 池的最大的大小如何去设置! 了解:IO密集型,CPU密集型:(调优)  //1.CPU密集型 几核就是几个线程 可以保持效率最高 //2.IO密集型判断你的程序中十分耗IO的线程,只要大于 ...

  9. Java之Stream流

    Stream流的初步学习 初次学习Stream流的学习笔记,学习之前先了解一下函数式接口 概述 API是一个程序向使用者提供的一些方法,通过这些方法就能实现某些功能.所以对于流API来 说,重点是怎么 ...

随机推荐

  1. SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子

    SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...

  2. 可迭代对象,迭代器对象,for循环

    迭代器:迭代的工具.迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的.如计算机中的迭代开发,就是基于软件的上一个版本更新.以下代码就不是迭 ...

  3. JAVA大数的一些操作

    参考: https://www.cnblogs.com/tonyyy/p/10433460.html https://www.cnblogs.com/wkfvawl/p/9377441.html (d ...

  4. 【使用篇二】SpringBoot异常处理(9)

    异常的处理方式有多种: 自定义错误页面 @ExceptionHandler注解 @ControllerAdvice+@ExceptionHandler注解 配置SimpleMappingExcepti ...

  5. LG1410 子序列 二分图判定

    问题描述 LG1410 题解 如果\(i<j,a_j \le a_i\),那么他它们不能在一个上升序列中. 于是在\(i,j\)之间建边,看建出来的图是不是二分图即可. \(\mathrm{Co ...

  6. Mybatis中的@Param注解(自己没试过)

    @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应//https ...

  7. c#中几种数据结构

    数组型: Array:内存连续分配,长度不可变,可索引访问. ArrayList:早期版本使用,非泛型,类型不安全,如果元素数据类型不同可考虑使用. List<>:泛型,可变长度,内存连续 ...

  8. 关于==和equals的区别和联系,面试这么回答就可以

    长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果面试官问你<关于==和equals的区别>,该怎么回答完美呢?可以这样说 总结的来说: 1) ...

  9. TCP/UDP通信中server和client是如何知道对方IP地址的

    在TCP通信中 client是主动连接的一方,client对server的IP的地址提前已知的.如果是未知则是没办法通信的. server是在accpet返回的时候知道的,因为数据包中包含客户端的IP ...

  10. 洛谷 P5021 [NOIP2018]赛道重建

    洛谷 P5021 [NOIP2018]赛道重建 传送门 思路 思路就是常规的思路,所以就不说了--我就是来记录一下我的\(AC\)之路的,真的是太爽了 没错--我也是一个个打的部分分,最后终于AC的, ...