Java学习:Stream流式思想

Stream流

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

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

Stream操作有两个基础特征:

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

遍历及过滤集合中的元素

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

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 /*
 5  *   使用 传统方式 遍历 及 过滤 集合
 6  *   需求 :
 7  *       1、第一步过滤,只需要 以 “张” 开头的名字
 8  *       2、第二步过滤只需要 ,名字长度为 2 的名字
 9  * */
10 public class Test01Stream {
11
12     public static void main(String[] args) {
13 //        创建一个集合 List , 存储姓名 并根据要求 进行过滤
14         List<String> nameList = new ArrayList<>();
15         nameList.add("张三");
16         nameList.add("李四");
17         nameList.add("王五");
18         nameList.add("赵六");
19         nameList.add("田七");
20         nameList.add("王八");
21         nameList.add("张四");
22         nameList.add("张三丰");
23
24 //        使用传统方式进行过滤
25
26 //         1、第一步过滤,只需要 以张开头的名字
27
28 //        需要 创建一个新的集合 对 第一次过滤之后的 姓名 进行存储
29         List<String> listA = new ArrayList<>();
30         for (String s : nameList) {  //使用增强 for 循环 对 集合进行遍历
31             if (s.startsWith("张")) {
32                 listA.add(s);//将过滤后的结果 添加到新的集合中
33             }
34         }
35
36         List<String> listB = new ArrayList<>();
37         for (String s : listA) {
38             if (s.length() == 2) {
39                 listB.add(s);
40             }
41         }
42
43         for (String s : listB) {
44             System.out.print(s + "  ");// 最终过滤结果  张三  张四
45         }
46     }
47 }

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

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 /*
 5 *   使用Stream流的方式 遍历 并 过滤集合
 6 *       需求 :
 7             1、第一步过滤,只需要 以 “张” 开头的名字
 8             2、第二步过滤只需要 ,名字长度为 2 的名字
 9 * */
10 public class Test02Stream {
11
12     public static void main(String[] args) {
13         //        创建一个集合 List , 存储姓名 并根据要求 进行过滤
14         List<String> nameList = new ArrayList<>();
15         nameList.add("张三");
16         nameList.add("李四");
17         nameList.add("王五");
18         nameList.add("赵六");
19         nameList.add("田七");
20         nameList.add("王八");
21         nameList.add("张四");
22         nameList.add("张三丰");
23
24 //        使用 Stream 流的方式 ,对集合进行遍历,并过滤
25 //        1、第一步过滤,只需要 以 “张” 开头的名字
26
27 //        将集合转换为 Stream流, 直接调用Collection接口的一个默认方法 stream
28         nameList.stream().filter(s->s.startsWith("张"))
29                          .filter(s->s.length()==2)
30                          .forEach(s-> System.out.print(s+"  "));// 输出结果 : 张三  张四
31     }
32 }

原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/11331978.html

时间: 2024-11-08 04:39:13

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

Java Stream流式思想

说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端. 引言 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们需要对集合中的元 素进行操作的时候,除了必需的添加.删除.获取外,最典型的就是集合遍历.例如: import java.util.List; impor

jdk1.8新特性Stream流式处理

前言: 之前在学习JDK1.8的时候接触到了1.8的两个重要的新特新,一个是lambda函数式编程.另一个则是接口的变化,在这里还有一个非常重要的内容就是strema流式处理方式,在传统的java代码中,如果我们要对一个集合做一些操作,就必须遍历这个集合那个集合中的元素逐个操作,而在JDK1.8引入stream流式处理方式后,我们可以不用对集合进行遍历可以直接操作集合得到我们想要的结果,在这里看一个小例子: 例如在这里有一个存放字符串的list集合,我需要获取list集合字符长度是三且不为空的字

Java 之 Stream 流

Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端 一.传统遍历 1.传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们需要对集合中的元素进行操作的时候,除了必需的添加.删除.获取外,最典型的就是集合遍历.例如: 1 import java.util.ArrayList; 2 import java.util.List; 3 4 pub

简洁方便的集合处理——Java 8 stream流

背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表达式等,所以我们还是要去了解java8的魅力. 今天我们来学习java8的Stream,并不需要理论基础,直接可以上手去用. 我接触stream的原因,是我要搞一个用户收入消费的数据分析.起初的统计筛选分组都是打算用sql语言直接从mysql里得到结果来展现的.但在操作中我们发现这样频繁地访问数据库

Java Swing 之流式布局管理器

/** * java 之流式布局 * @author gao */ package com.gao; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; @SuppressWarnings("serial") public class Flow

移动端布局学习之流式布局1

1.移动端基础 1.1 浏览器现状 国内的UC和QQ 百度等手机浏览器都是根据Webkit修改过来的内核,国内目前尚无自主研发的内核,就像国内的手机系统基本上都是局域安卓修改开发的一样. 意思就是:兼容移动端主流浏览器 处理Webkit内核浏览器即可. 1.2 手机屏幕的现状 移动端设备屏幕尺寸非常多,碎片化严重 Android设备有多种分辨率480*480 480*854 540*960 720*1280 等等 近年来iPhone的碎片化也严重了 其设备的主要分辨率有 640*960 640*

JavaScript AJAX stream 流式显示

当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传送完成,就取消定时器. function ajax_stream(url,data,element) { var xmlHttp=null; if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc. xmlHttp=new XML

Java学习IO流(二)

字节流复制文件 原理:读取一个已有的数据,并将这些读取到的数据写到另一个文件中 字节流通过单字节复制和字节数组赋值 package com.oracle.demo01; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyDemo { public static void main(String[] args) throws IO

Java的Stream流

1.读取控制台输入 Java的控制台输入由System.in完成.为了获得一个绑定到控制台的字符流,可以把System.in包装在一个BufferedReader对象中来创建一个字符流,创建BufferedReader的语法如下: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedReader对象创建后,可以通过read()方法从字符流中读取一个字符:或者通过readLine()方法