⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/wuxiong1028/article/details/105009682 「LouisWuX」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1、Stream流介绍

在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStreamOutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 StAX 对 XML解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。

JDK8 中的 Stream 是对集合(Collection)对象功能的增强,它借助于lambda表达式,更优雅的表达风格,极大的提高编程效率和程序可读性。它针对于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。不多说,上用法。

2、Stream流实现与传统方式实现对比

案例:找出列表中包含朱婧且姓名长度为2的名字

2.1、传统方式实现

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 1.定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张四");
list.add("四");
list.add("张四");
list.add("张四");
list.add("张四");
list.add("张四");
// 2.挑选list中包含张三的
ArrayList<String> list1 = new ArrayList<>();
for (String s : list) {
if (s.startsWith("张三")){
list1.add(s);
}
}
System.out.println("挑选list包含张三的结果:"+list1);
// 3.再从list1中挑选挑选名字长度为2的
ArrayList<String> list2 = new ArrayList<>();
for (String s : list1) {
if (s.length() == 2){
list2.add(s);
}
}
System.out.println("挑选list1长度为2的结果:"+list2);
// 4、遍历
for (String s : list2) {
System.out.println("最终结果 = " + s);
}
}
}

2.2、Stream流方式实现

package com.bohoog.controller;

import java.util.ArrayList;

public class Boo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");

//Stream流实现
list.stream()
.filter((name) -> name.startsWith("朱婧"))
.filter((name) -> name.length()==2)
.forEach((name) -> System.out.println(name));

}
}

3、Stream流的常用API

3.1、stream流的获取

在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现

试例:

package com.bohoog.controller;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;

public class Boo {
public static void main(String[] args) {
//Collction集合
Collection<String> collection = new ArrayList();
Stream<String> stream = collection.stream();
//List集合
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
//ArrayList集合
ArrayList<String> arrayList = new ArrayList<>();
Stream<String> stream2 = arrayList.stream();
//LinkedList集合
LinkedList<String> linkedList = new LinkedList<>();
Stream<String> stream3 = linkedList.stream();

//of()方式实现
List<String> list1 = new ArrayList<>();
Stream<List<String>> stream4 = Stream.of(list1);
//传入可变数组
Stream<String> stream5 = Stream.of("1","2","3","4");
}
}

3.2、forEach()

遍历流中的对象

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");
list.add("李四");

//遍历流的对象
list.stream().forEach((name) -> System.out.println(name));
}
}

3.3、filter()

filter对流对象进行过滤

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四二");
list.add("李四我");
list.add("李四去晚");
list.add("李四请问");
list.add("李四去");
list.add("李四我");

//过滤流的对象
list.stream().filter((name) -> name.length()==2);
}
}

3.4、map()

map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");

//map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
list.stream().map(num -> Integer.parseInt(num));
}
}

3.5、count()

count是对流数据统计的方法,但是count之后返回的是long类型,所以无法再进行流操作。

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");

//count()对流数据进行统计
System.out.println(list.stream().count());
}
}

3.6、limit()

选取流数据的前多少条数据

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("李四1");
list.add("李四2");
list.add("李四3");
list.add("李四4");
list.add("李四5");
list.add("李四6");
list.add("李四7");
//limit() 选取流数据的前多少条数据
list.stream().limit(2);
}
}

3.7、skip()

跳过流数据的前多少条数据,该方法与limit()方法刚好相反

package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("李四1");
list.add("李四2");
list.add("李四3");
list.add("李四4");
list.add("李四5");
list.add("李四6");
list.add("李四7");
//skip() 跳过流数据的前多少条数据
list.stream().skip(2);
}
}

3.8、concat()

Stream的静态方法concat()实现对两个流数据进行合并

package com.bohoog.controller;

import java.util.ArrayList;
import java.util.stream.Stream;

public class Aoo {
public static void main(String[] args) {
// 定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("李四1");
list.add("李四2");
list.add("李四3");
list.add("李四4");
list.add("李四5");
list.add("李四6");
list.add("李四7");
// 定义一个集合
ArrayList<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list1.add("5");
list1.add("6");
list1.add("7");
//concat()实现对两个流数据进行合并
Stream.concat(list.stream(),list1.stream());
}
}

文章目录
  1. 1. 1、Stream流介绍
  2. 2. 2、Stream流实现与传统方式实现对比
    1. 2.0.1. 2.1、传统方式实现
    2. 2.0.2. 2.2、Stream流方式实现
  • 3. 3、Stream流的常用API
    1. 3.0.1. 3.1、stream流的获取
    2. 3.0.2. 3.2、forEach()
    3. 3.0.3. 3.3、filter()
    4. 3.0.4. 3.4、map()
    5. 3.0.5. 3.5、count()
    6. 3.0.6. 3.6、limit()
    7. 3.0.7. 3.7、skip()
    8. 3.0.8. 3.8、concat()