赵走x博客
网站访问量:151559
首页
书籍
软件
工具
古诗词
搜索
登录
JAVA中List集合Stream流详解
Java8 Stream流中的 collect() 方法,远比你想象中的强大
JAVA中List集合Stream流详解
资源编号:551256
热度:116
JAVA中List集合Stream流详解
# 1、Stream流介绍 在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStream和 OutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 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
list = new ArrayList<>(); list.add("张三"); list.add("张四"); list.add("四"); list.add("张四"); list.add("张四"); list.add("张四"); list.add("张四"); // 2.挑选list中包含张三的 ArrayList
list1 = new ArrayList<>(); for (String s : list) { if (s.startsWith("张三")){ list1.add(s); } } System.out.println("挑选list包含张三的结果:"+list1); // 3.再从list1中挑选挑选名字长度为2的 ArrayList
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
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
collection = new ArrayList(); Stream
stream = collection.stream(); //List集合 List
list = new ArrayList<>(); Stream
stream1 = list.stream(); //ArrayList集合 ArrayList
arrayList = new ArrayList<>(); Stream
stream2 = arrayList.stream(); //LinkedList集合 LinkedList
linkedList = new LinkedList<>(); Stream
stream3 = linkedList.stream(); //of()方式实现 List
list1 = new ArrayList<>(); Stream
> stream4 = Stream.of(list1); //传入可变数组 Stream
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
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
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
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
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
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
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
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
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()); } } ``` ### 3.9 collect https://www.handsomemark.com/blog/detail/652506c26e495207230a0ce0