答應我!下次開發就開始用 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>


分享到:


相關文章: