java8中的流Stream,可以由array,list等其它的数据结构得到。
在java8中,任何实现了Collection接口的集合类都有个叫stream方法,这个方法可以将该集合下的元素放到流中。
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
Stream<String> stream = list.stream();//将它转为流
Integer[] myArray = {1, 3, 5};
Stream<Integer> myStream = Arrays.stream(myArray);//将它转为流
有了流之后,我们就可以将这个流里面的元素进行各种处理再流到其它地方
首先我们看下流处理中的map方法,这个方法接收一个函数,该函数会处理流中的每个元素,我们一般传入一个lambda表达式
Integer[] myArray = {1, 3, 5};
Stream<Integer> myStream = Arrays.stream(myArray);//将它转为流
Stream<Integer> newStream = myStream.map(x->x*2);//每个元素乘以2
newStream.forEach(x->System.out.println(x));//遍历流中的元素
接下来我们看下流的filter函数,这个函数也是接收一个函数作为参数,一般是lambda函数。该函数必须返回一个boolean值。
Integer[] myArray = {1, 3, 5};
Stream<Integer> myStream = Arrays.stream(myArray);//将它转为流
Stream<Integer> filterStream = myStream.filter(x->x>4);//只把大于4的流到新的流中
filterStream.forEach(x->System.out.println(x));//j结果是 5
最后我们看看对流的进行最终计算处理的几个函数。对流的最终处理叫reduce.内置的sum,average和count都是计算函数。
int [] myArray = {1, 3, 5};
int sum = Arrays.stream(myArray).sum();
System.out.println(sum);// 结果:9
当然我们可以用reduce来进行最终计算,这个函数要俩个参数,一个是标记(总结果的初始化状态),一个是lambda函数
int [] myArray = {1, 3, 5};
int sum = Arrays.stream(myArray).reduce(0, (a,b)->a+b);
System.out.println(sum);// 结果:9
String[] str = { "这是", "拼接", "的", "结果" };
String result = Arrays.stream(str)
.reduce("结果是:", (a,b) -> a + b);
System.out.println(result);