出现java.lang.IllegalStateException: stream has already been operated upon or closed。java
原文连接 :数组
package com.jdk8.newFeatures; import org.junit.Test; import javax.swing.*; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 测试Stream 的集合流 */ public class StreamTest01 { @Test public void test(){ // 1-1准备初始的数据流,经过已有的集合来建立流 无存储。 //Stream不是一种数据结构,它只是某种数据源的一个视图,数据源能够是一个数组,Java容器或I/O channel等 List<String> strings = new ArrayList<>(Arrays.asList("111","222","333")); // 1-2建立Stream Stream stream = strings.stream(); stream.forEach(System.out::println); // stream.forEach(System.out::println); // 不加注释,会对stream操做两次,出现java.lang.IllegalStateException: stream has already been operated upon or closed // 1-3 或者经过已有的数据来建立Stream建立流,可使用Stream类提供的Stream.of()方法,直接返回一个由指定元素组成的流。 Stream<String> streamxx = Stream.of("aaa","bbb","ccc"); streamxx.forEach( i->System.out.println("(2)"+i) ); //2-1 filter 过滤条件 中间操做 List<String> lists = Arrays.asList("AAA","","BBB","CCC"); lists.stream().filter(s -> s.length()>0).forEach(i -> System.out.println("filter后:"+i)); // 2-2 map映射 中间操做 List<Integer> numbers = Arrays.asList(11,2,3,14,14); numbers.stream().map(i->i*i).forEach(i -> System.out.println("平方数后:"+i)); // 2-3 limit/skip limit ,返回 Stream 的前面 n 个元素;skip 则是扔掉前 n 个元素 System.out.println("执行limit后:"); numbers.stream().limit(4).forEach(System.out::println); // 2-4 sorted 方法用于对流进行排序 System.out.println("排序后:"); numbers.stream().sorted().forEach(System.out::println); // 2-5 distinct主要用来去重,如下代码片断使用 distinct 对元素进行去重 System.out.println("distinct 对元素进行去重: "); numbers.stream().distinct().forEach(System.out::println); // 3 Stream的最终操做 : 计算出流中元素的个数、将流装换成集合等。 //3-1 最终结果讨论 count用来统计流中的个数 System.out.println("count用来统计流中的元素个数: "); System.out.println(numbers.stream().count()); //3-2 forEach 遍历单个子元素进行操做,ints()返回的是一个intStream() new Random().ints().limit(4).forEach(System.out::println); //3-3 collect 就是一个规约操做,能够接受各类作法做为参数,将流中的元素累计汇成集合框架中的一种,如List List<String> string3 = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis"); string3 = string3.stream().filter(string -> string.startsWith("Hollis")).collect(Collectors.toList()); System.out.println("string3的collect后的测试是:"+string3); } }
111 222 333 (2)aaa (2)bbb (2)ccc filter后:AAA filter后:BBB filter后:CCC 平方数后:121 平方数后:4 平方数后:9 平方数后:196 平方数后:196 执行limit后: 11 2 3 14 排序后: 2 3 11 14 14 distinct 对元素进行去重: 11 2 3 14 count用来统计流中的元素个数: 5 1651256773 1647013782 -1530012352 1888788786 string3的collect后的测试是:[Hollis, HollisChuang, Hollis666, Hollis]