jdk9-stream 和 Try with Resources

127 阅读1分钟

一、stream

9 stream 新增了一些方法 dropWhile、takeWhile、ofNullable,为 iterate 方法新增了一个重载方法

1.takeWhile

在有序的stream 中 遇到false 就结束 之前的集合就返回

Stream.of("1","2","3","","4","5").takeWhile(s->!s.isEmpty()) .forEach(System.out::print);
//打印 123
2.dropWhile

在有序的stream 中 遇到false 就开始 之后的都返回

Stream.of("1","2","3","","4","5").dropWhile(s->!s.isEmpty()) .forEach(System.out::print);
//打印 45
3.iterate
# 打印1-99 的数字
Stream.iterate( 1 ,i -> i< 100 ,i -> i+1).forEach(System.out::println);

4. ofNullable

如果提供的元素为null,则此方法返回空Stream。当我们要将非空单个元素附加到流时

 Stream.ofNullable(1);
 Stream.ofNullable(null);

二、Try with Resources

以前的写法 你打开一个资源,要在finally 中关闭 Try with Resources写法 会自动关闭,不用手动关闭

jdk9 做了改进 如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。

资源:所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),可以使用作为资源。

Scanner scanner = new Scanner(new File("testRead.txt");
 PrintWriter writer = new PrintWriter(new File("testWrite.txt"));
try (Scanner s1= scanner; PrintWriter w1=writer){
 
    while (s1.hasNext()) {
	w1.print(scanner.nextLine());
    }
}
try (Scanner scanner = new Scanner(new File("testRead.txt"));
    PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) {
    while (scanner.hasNext()) {
	writer.print(scanner.nextLine());
    }
}

或者
final Scanner scanner = new Scanner(new File("testRead.txt"));
PrintWriter writer = new PrintWriter(new File("testWrite.txt"))
try (scanner;writer) { 
    // omitted
}