这节课我们来讲讲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);
}
}