这节课我们来讲讲stream常用方法


import java.util.ArrayList;

import java.util.List;

import java.util.Optional;

import java.util.stream.Stream;



public class Teach02 {



/**

* Stream API使用流程

* 1. 创建流

* 2. 中间操作

* 3. 终止操作

*/



public static void main(String[] args) {

List<String> stringList = new ArrayList<>();

for (int i = 0; i < 10; i++) {

stringList.add(String.valueOf(i));

}



//1.创建流

Stream<String> stream = stringList.stream();



//2. 中间操作

//中间操作的返回值类型一定是Stream或Stream的子类

/**

* limit(int maxsize) 限制操作元素个数,创建一个新的流,取maxsize个元素到新流中,若原流中元素个数小于maxsize,则全部取出即可,然后返回新的流

* map 创建一个新的流,将旧流中的这组元素中的每个元素都作为参数执行Function接口的apply方法然后将返回值加入流中,然后返回新的流

*/

stream = stream.limit(5).map((str)->{return str + "1";});



//3. 终止操作 返回值类型不为Stream,终止操作不会创建新的流

//终止操作后此流不可继续使用

stream.forEach(System.out::println);



Stream<String> stream2 = stringList.stream();



/**

* reduce() 方法,会将一组数据的前两个元素作为参数传递给apply(Object o1, Object o2)方法,

* 然后将返回的结果和下一个元素继续作为参数继续执行apply知道取到最后一个元素

*

* 原理:

*

* Optional fun(List list)

* {

* Optional optional = new Optional();

* int size = list.size();

* if(size < 2)

* {

* optional.set(null);

* return optional;

* }

* Object o1 = list.get(0),o2 = list.get(1);

* for(int i = 2; i < size; i++)

* {

* Object o3 = apply(o1,o2);

* o1 = o3;

* o2 = list.get(i);

* }

* optional.set(apply(o1,o2));

* return optional;

* }

*/

Optional optional = stream2.reduce((s1, s2)->{return s1 + s2;});



Object o = optional.get();



System.out.println(o);



Stream<String> stream3 = stringList.stream();



/**

* filter 过滤,filter会创建一个新的流,然后对旧流里每个元素执行boolean test(T t)方法,

* 如果返回true就将这个元素加入到新流中,否则不加入

*/

stream3 = stream3.limit(5).filter((s)->{return Integer.parseInt(s) > 2;});



stream3.forEach(System.out::println);

}

}