为什么用 Java :一个来自 Python 阵营的程序员告诉(2)

Runnable r2 =()->System.out.println("Hello world two!");

// Lambda Sorting

Collections.sort(personList,(Person p1,Person p2)-> p1.getSurName().compareTo(p2.getSurName()))

// Lambda Listener

testButton.addActionListener(e ->System.out.println("Click Detected by Lambda Listener"));

这里无法详细展开Lambda函数这个话题——Lambda Expressions in Java 8文章提供了一个很好的切入点来更多地了解Lambda函数。

Java 8引入了流(stream)的概念,这为Java提供了很多现代函数式语言的特性。流是一种对集合上的一系列转换延迟执行的机制。比如我们来数一下以’A’开头的名字。首先想到的方法肯定是像下面这样:

List<String> names =newLinkedList<>();

// ... add some names to the collection

long count =0;

for(String name : names){

if(name.startsWith("A"))

++count;

}

如果用流,上述就可以简化为首先将集合转换成流,然后使用函数:

List<String> names =newLinkedList<>();

// ... add some names to the collection

long count = names.stream()

.filter(name -> name.startsWith("A"))

.count();

Java同时支持用parallelStream()来进行流的并行处理。并行流允许流水线业务在独立的线程同时执行,这不仅改进了语法,同时提高了性能。在大多数情况下,你可以简单得用parallelStream()替换stream()实现并行。

Try-With-Resources结构

在Java 6之前,打开一个文件然后读取内容需要通过try/finally来完成:

staticString readFirstLineFromFileWithFinallyBlock(String path)

throws IOException{

BufferedReader br =newBufferedReader(newFileReader(path));

try{

return br.readLine();

}finally{

if(br !=null) br.close();

}

}

但是readLine和close都有可能抛出异常。在这种情况下,readLine抛出的异常被忽略,我们事实上并不知道readLine执行失败。

Java 7引入了 Try-With-Resources结构来克服这种缺陷:

staticString readFirstLineFromFile(String path) throws IOException{

try(BufferedReader br =

newBufferedReader(newFileReader(path))){

return br.readLine();

}

}

上例中,无论在何种失败情况下,BufferedReader都会自动关闭文件流。你可以通过用逗号分隔的方式,用一个try语句来打开多个资源。

多重catch

以往Java只允许一个catch代码块对应一个异常,这造成如下的代码冗余:

catch(IOException ex){

logger.log(ex);

throw ex;

catch(SQLException ex){

logger.log(ex);

throw ex;

}

从Java 7开始,你可以在一个代码块内捕捉多个异常,从而减少了代码冗余:

catch(IOException|SQLException ex){

logger.log(ex);

throw ex;

}

数值字面常量(Numeric Literals)

数值字面常量可以添加下划线是Java语言的新特性。这允许你使用_作为大数字的视觉分隔符。下面的例子不言自明:

int thousand =1_000;

int million =1_000_000;

使用Java

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/402e6150fea25c7a0ac703923e84ee83.html