在JDK8中一个很重要的新特性就是Stream流,学会他可以让你在写代码的时候节省很多的步骤,短短一行就可以完成对集合、数组等数据的筛选过滤和转换,首先来看看使用Stream流的构造是怎样的。
一、Stream流的构成
先贴一段Stream流的方法
public class Stream {
public static void main(String[] args) {
List<String> list= new ArrayList<>();//创建一个集合
list.add("弹力球");
list.add("瑜伽球");
list.add("篮球");
List<String> lq= list.stream().filter(S -> S.contains("篮")).collect(Collectors.toList());、 //Stream流
System.out.println(lq+"进了");//打印用Stream流处理的数据,打印结果[篮球]进了!
}
}
上面这段代码是用Stream流完成了对数组的一个筛选功能,功能点仅仅用了一行,是不是很方便,构成Stream流的语法分三部分:
1.创建Stream流
list.stream()
2.调用Stream流方法对数据进行操作
filter(S->S.contains(“篮”))//括号中的是Lambda表达式,不了解的可以查看我的上一篇文章
3.对操作完的数据进行"入库"操作,可以理解为取到了想要的球然后要放到篮筐里去
collect(Collectors.toList());
二、Stream中对数据操作的重要方法
1.mapToInt、mapToLong、mapToDoble方法,主要用来统计数组,对应的返回值类型分别是IntSummaryStatistics、LongSummaryStatice、MapSummaryStatice;
2.map方法,在方法里面操作数组,然后会有一个返回值,典型的Function函数;
3.limit方法,用来取前几个数据,如果方法中的数量超过数组的长度就返回全部数据;
4.forEach方法,没有返回值,但是可以进行输出,典型的Consumer函数
代码案例如下
public class Stream {
public static void main(String[] args) {
List<Integer> list1=new ArrayList<>();
list1.add(2);list1.add(4);list1.add(6);list1.add(8);
IntSummaryStatistics intSummaryStatistics=list1.stream().mapToInt(x->x).summaryStatistics();
//IntSummaryStatistics类主要用来处理数组
List<Integer> list2=list1.stream().map(x->x+1).collect(Collectors.toList());
//map方法可以对数组中的每一个值进行统一变换
List<Integer> list3=list1.stream().limit(3).collect(Collectors.toList());
//limit方法可以取到指定位置的数组,例子中的(3)就是取前三个
list1.stream().forEach(System.out::print);
//forEach作为一个结果输出,结果:2468
System.out.println(intSummaryStatistics.getMax());
//IntSummaryStatistics求最大值方法,结果:8
System.out.println(intSummaryStatistics.getMin());
//IntSummaryStatistics求最小值方法,结果:2
System.out.println(intSummaryStatistics.getAverage());
//IntSummaryStatistics求平均值方法,结果:5.0
System.out.println(intSummaryStatistics.getSum());
//IntSummaryStatistics求和方法,结果:20
System.out.println(list2);//结果[3,5,7,9]
System.out.println(list3);//结果[2,,4,6]
}
}
本文中的Stream流中会使用到Lambda表达式,Stream中的方法很多都用到了四大函数接口,也是JDK8的新特性,不理解的可以看我上一篇文章Lambda表达式与四大函数接口。