Stream流
Stream流
函数式编程:https://github.com/RonnieLee24/Java_new_feature/blob/master/函数式编程.md
Stream本身并不是数据结构,不会存储数据或改变数据源,它仅定义处理方式,可以视为一种高级迭代器
- 不仅能够支持顺序处理
- 还能进行并行处理
- 为集合的过滤映射,聚合等操作提供了一种高效的实现方式
要掌握和有效使用stream API,关键在于理解其三个核心步骤:
- 第一步创建流
- 第二步中间操作
- 第三步终端操作
创建流
流的拼接
public class test {
public static void main(String[] args) {
Stream<String> stream1 = Stream.of("a", "b", "c");
Stream<String> stream2 = Stream.of("d", "e", "f");
Stream<String> stream = Stream.concat(stream1, stream2); // 流的拼接
stream.forEach(s -> System.out.print(s));
}
}
动态地构建一个流(根据特定条件:动态决定是否将元素加入流中)StreamBuilder 流构建器
public class test {
public static void main(String[] args) {
Stream.Builder<String> streamBuilder = Stream.builder();
streamBuilder.add("a");
streamBuilder.add("b");
if (Math.random() > 0.5){ // 50% 可能添加 C
streamBuilder.add("c");
}
// 注意:一旦调用了 build 方法,就不能再向 streamBuilder 里面添加更多元素
// 否则会抛出 illegalStateException 异常
Stream<String> stream = streamBuilder.build();
stream.forEach(s -> System.out.print(s));
}
}
从文件创建流,适合文本分析,日志文件处理等场景,通过 Java的 Files类的 lines 方法来实现
public class test {
public static void main(String[] args) {
Path path = Paths.get("F:\\Test\\src\\test5\\file.txt");
try {
Stream<String> lines = Files.lines(path);
lines.forEach(s -> System.out.println(s));
} catch (IOException e) {
e.printStackTrace();
}
}
}