流的创建
/**
* 方式1 集合对象.stream
* Stream<Integer> stream = list.stream();
* 方式2 Stream.of(多个数据)
* 方式3 AArrays.stream(数组)
*/
//方式1 集合对象.stream
//--创建集合
ArrayList<Integer> integers = new ArrayList<>();
//--使用集合工具类为集合赋值操作
Collections.addAll(integers,2,4,1,5,8,6,3,7,9,10);
//--获取流
Stream<Integer> stream = integers.stream();
//方式2 Stream.of(多个数据)
//获取流
Stream<Integer> stream1 = Stream.of(2, 4, 1, 5, 8, 6, 3, 7, 9, 10);
//方式三 Arrays.stream(数组)
//获取流
IntStream stream2 = Arrays.stream(new int[]{2, 4, 1, 5, 8, 6, 3, 7, 9, 10});
流的终止,流一旦终止后面再操作将报错
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:479)
at java.util.stream.ReferencePipeline.max(ReferencePipeline.java:515)
at www.流式编程.课堂重现.text03.main(text03.java:28)
流的一些导致流终止的操作
/**
* count() 返回流中元素总数
* max(Comparator c) 返回流中最大值
* min(Comparator c) 返回流中最小值
* forEach(Consumer c)内部迭代(使用 Collection 接口需要用户去做迭代,
* 称为外部迭代。相反,Stream API 使用内部迭代——它帮你把迭代做了)
*/
//--count() 返回流中元素总数
System.out.println(stream.count());
//--max(Comparator c) 返回流中最大值
Optional<Integer> max = stream.max(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
System.out.println(max);
//简化写法
Optional<Integer> max1 = stream.max((o1, o2) -> {
return o1 - o2;
});
System.out.println(max1.get());