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());}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部