答应我!下次开发就开始用 java Stream第二期

上期我们简单的介绍了下java Stream这期就具体的操作下。

答应我!下次开发就开始用 java Stream第二期

一、创建Stream

List<string> list = new ArrayList<>();

//一下分别是顺序流和并行流,两种创建方式
Stream<string> stream = list.stream();
Stream<string> parallelStream = list.parallelStream();

System.out.println("stream="+stream);
//java.util.stream.ReferencePipeline$Head@63961c42

System.out.println("parallelStream="+parallelStream);
//java.util.stream.ReferencePipeline$Head@65b54208

//2.使用Arrays的stream方法
Integer[] age = new Integer[5];
Stream<integer> stream1 = Arrays.stream(age);

System.out.println("stream1="+stream);
//stream1=java.util.stream.ReferencePipeline$Head@63961c42

//3使用Stream中的静态方法:of()、iterate()、generate()

Stream<integer> ofStream = Stream.of(0, 1, 2, 3);

Stream<integer> limit = Stream.iterate(1, (n) -> n * 2).limit(10);

Stream<double> genStr = Stream.generate(Math::random).limit(10);

genStr.forEach(System.out::println);
//0.9971723393777241 0.08860941392629373

limit.forEach(System.out::println);//1 2 4 8 16 32 64

System.out.println("ofStream="+ofStream);
//java.util.stream.ReferencePipeline$Head@685f4c2e

//使用 BufferedReader.lines() 方法,将每行内容转成流

BufferedReader reader = new BufferedReader(new FileReader("C:\\\\记录表20190715 (1).xlsx"));
Stream<string> lines = reader.lines();

lines.forEach(System.out::println);//PK! �)�]s[Content_Types].xml �(�



2. 流的中间操作
/**
* filter:过滤流中的某些元素
* limit(n):获取n个元素
* skip(n):跳过n元素,配合limit(n)可实现分页
*distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
*/

Stream<integer> integerStream = Stream.of(2, 3, 3, 3, 4, 455, 5, 5, 6, 56, 66, 4, 44);
Stream<integer> fit = integerStream.filter(s -> s < 66)//2, 3, 3, 3, 4 .......
.distinct()//2 4
.skip(2).limit(2);
fit.forEach(System.out::println);// 4 5
/<integer>/<integer>/<string>/<double>/<integer>/<integer>/<integer>/<string>/<string>/<string>

2.2 映射

map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

Stream<string> flaMap = list.stream().flatMap(s -> {
String[] split = s.split(",");

Stream<string> stream = Arrays.stream(split);
return stream;
});

flaMap.forEach(System.out::println);
/**
* aaa,bbb,ccc 2222 33 444 aaa bbb ccc
*/
/<string>/<string>

2.3 排序

sorted():自然排序,流中元素需实现Comparable接口

sorted(Comparator com):定制排序,自定义Comparator排序器

 List<string> list = Arrays.asList("aa", "bb", "cc", "dd");

list.stream().forEach(System.out::println);
/<string>

2.4 消费

peek:如同于map,能得到流中的每一个元素。但map接收的是一个Function表达式,有返回值;而peek接收的是Consumer表达式,没有返回值。

Student s1 = new Student("aa", "10");
Student s2 = new Student("bb", "22");

List<student> list = Arrays.asList(s2, s2);

list.stream().peek(student -> student.setAge("222"))
.forEach(System.out::println);
/<student>


分享到:


相關文章: