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 }
 

猜你喜欢

转载自www.cnblogs.com/tianxiafeiyu/p/12216775.html