本文来说下Java中List集合Stream流
文章目录
Stream流介绍
在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStream和 OutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 StAX 对 XML解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。
JDK8 中的 Stream 是对集合(Collection)对象功能的增强,它借助于lambda表达式,更优雅的表达风格,极大的提高编程效率和程序可读性。它针对于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。不多说,上用法。
Stream流实现与传统方式实现对比
案例:找出列表中包含张三且姓名长度为2的名字
传统方式实现
传统方式实现
package com.wideth.util;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 1.定义一个集合
ArrayList<String> list = new ArrayList<>();
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);
}
}
}
结果
Stream流方式实现
Stream流方式实现
package com.wideth.util;
import java.util.ArrayList;
public class Main2 {
public static void main(String[] args) {
// 1.定义一个集合
ArrayList<String> list = new ArrayList<>();
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
stream流的获取
在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现
package com.wideth.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
public class Main3 {
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");
}
}
forEach方法
遍历流中的对象
package com.wideth.util;
import java.util.ArrayList;
public class Main4 {
public static void main(String[] args) {
// 1.定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张四");
list.add("王五");
list.add("赵六");
list.add("张无忌");
list.add("张三丰");
//2.遍历流的对象
list.stream().forEach((name) -> System.out.println(name));
}
}
filter方法
filter对流对象进行过滤
package com.wideth.util;
import java.util.ArrayList;
public class Main5 {
public static void main(String[] args) {
// 1.定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张四");
list.add("王五");
list.add("赵六");
list.add("张无忌");
list.add("张三丰");
//2.过滤流的对象
list.stream().filter((name) -> name.length()==3);
}
}
map方法
map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
package com.wideth.util;
import java.util.ArrayList;
public class Main6 {
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))
.forEach((num) -> System.out.println(num));;
}
}
count方法
count是对流数据统计的方法,但是count之后返回的是long类型,所以无法再进行流操作。
package com.wideth.util;
import java.util.ArrayList;
public class Main7 {
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());
}
}
limit方法
选取流数据的前多少条数据
package com.wideth.util;
import java.util.ArrayList;
public class Main8 {
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).
forEach((name) -> System.out.println(name));
}
}
skip方法
跳过流数据的前多少条数据,该方法与limit()方法刚好相反
package com.wideth.util;
import java.util.ArrayList;
public class Main9 {
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).
forEach((name) -> System.out.println(name));
}
}
concat方法
Stream的静态方法concat()实现对两个流数据进行合并
package com.wideth.util;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Main10 {
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()).
forEach((name) -> System.out.println(name));;;
}
}
本文小结
本文总结了下Java中List集合Stream流相关的知识与内容