<>一、Stream流介绍

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

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

<>二丶Stream流实现与传统方式实现对比

**案例:**找出列表中包含张三且姓名长度为2的名字

<>2.1、传统方式实现
package com.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.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)); } }
<>三、Stream流的常用API

<>3.1、stream流的获取

在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现。
上代码:
package com.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()

遍历流中的对象
ackage com.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.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.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类型,因此无法再进行流操作。
ackage com.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()
<>3.6、limit()

选取流数据的前多少条数据
package com.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.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.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
()); } }
<>四、总结

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream
API可以极大提高Java程序员的生产力,让
程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信