Java 8 中 Stream(流)的轉換


Stream 流是 Java 8 中引入的重要概念, 把真正的函數式編程風格引入到Java中。如果能夠熟練掌握各種業務場景下對象到流的轉化,就可以方便的使用函數式風格編寫業務邏輯。
各種場景下產生 stream 方法:
1. 可以通過 Stream.of() 很容易地將一組元素轉化成為流,參數可以是一組用逗號分隔的對象,也可 以是一個集合對象,也可以是數組。
1 Stream stream1 = Stream.of("It's ", "a ", "wonderful ", "day ", "for ", "pie!");
2 Stream stream2 = Stream.of(3.14159, 2.718, 1.618);
3 Stream stream3 = Stream.of(new ArrayList());
4 Integer[] integers = {1,2,3};
5 Stream stream4 = Stream.of(integers);

 

2. 每個集合都可以通過調用 stream() 方法來產生一個流。
1 List<Long> longList = new ArrayList();
2 Stream stream = longList.stream();

 

3. Rondom 類對象可以產生隨機數流
1 Random rand = new Random(47);
2 Stream stream = rand.ints().boxed();

 

4. IntStream 類提供了 range() 方法用於生成整型序列的流。編寫循環時,這個方法會更加便利:
 1 // import static java.util.stream.IntStream.*;
 2 // 傳統方法:
 3 int result = 0;
 4 for (int i = 10; i < 20; i++){
 5     result += i;
 6 }
 7 System.out.println(result);
 8 // for-in 循環:
 9 result = 0;
10 for (int i : range(10, 20).toArray()){
11     result += i;
12 }

 

5. 在建造者設計模式(也稱構造器模式)中,首先創建一個 builder 對象,傳遞給它多個構造器信息,最后執行“構造”。Stream 庫提供了這樣的 Builder,可以通過 builder 對象產生流。
 1 // streams/FileToWordsBuilder.java
 2 import java.io.*;
 3 import java.nio.file.*;
 4 import java.util.stream.*;
 5  
 6 public class FileToWordsBuilder {
 7     Stream.Builder<String> builder = Stream.builder();
 8  
 9     public FileToWordsBuilder(String filePath) throws Exception {
10         Files.lines(Paths.get(filePath))
11              .skip(1) // 略過開頭的注釋行
12              .forEach(line -> {
13                   for (String w : line.split("[ .?,]+"))
14                       builder.add(w);
15               });
16     }
17  
18     Stream<String> stream() {
19         return builder.build();
20     }
21  
22     public static void main(String[] args) throws Exception {
23         new FileToWordsBuilder("Cheese.dat")
24             .stream()
25             .limit(7)
26             .map(w -> w + " ")
27             .forEach(System.out::print);
28     }
29 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM