Java 8与Apache Ignite

2016-07-30 09:24:05 
摘要:从JDK发布的历程来看,JDK1.6添加了对脚本语言:Ruby、Groovy、JavaScript的支持,JDK7添加了对集合(Collections)的增强支持,而Java8在JDK7之上进一步大胆地创新,引入了Lambda框架、Streams、函数式接口模块等。

时间过得真快,转眼间十年过去了,而Java都已经二十岁了,《礼记》有云“二十弱冠、三十而立”,我们首先要感谢JamesGosling和他的团队把Java带到这个世界上来,而年方弱冠,这位翩翩少年郎在IT技术的各个领域都取得了举世瞩目的成绩,在二十年这么长的时间里,已经有无数的企业应用、互联网应用和移动应用都是基于Java构建的,甚至包括物联网上的很多应用也依然使用Java编写,而目前各具特色的编程语言也是层出不穷、百花齐放,也确实给Java造成了不小的压力。面对眼前瞬息万变的IT技术世界,我还是坚信Java到了“而立之年”,仍然可以老骥伏枥为我们带来更多的惊喜!

Java 8与Apache Ignite

杨旭钧

Java8新功能特性

从JDK发布的历程来看,JDK1.6添加了对脚本语言:Ruby、Groovy、JavaScript的支持,JDK7添加了对集合(Collections)的增强支持,而Java8在JDK7之上进一步大胆地创新,引入了Lambda框架、Streams、函数式接口模块等,这里我们重点讲一下Lambda框架。Java8的最大亮点就是引入了Lambda表达式,通过Lambda表达式提供闭包的方式,使集合(Collection)库更加容易遍历、过滤、从一个集合中抽取数据,特别是集合(Collection)操作充分利用多核编程的特性,能够大幅提升并发操作的性能。

什么是Lambda表达式?

Lambda表达式是一个匿名函数,即没有函数名的函数,通常我们用Lambda表达式表示闭包操作。当开发者在编写一个Lambda表达式时,被编译成函数式接口。

Runnable接口实现

代码1是使用Lambda表达式来写一个Runnable接口。

[java] view plaincopyJava 8与Apache IgniteJava 8与Apache Ignite
  1. public class RunnableTest {  
  2.     public static void main(String[] args) {  
  3.     System.out.println("=== RunnableTest ===");  
  4.     // Anonymous Runnable  
  5.     Runnable r1 = new Runnable(){  
  6.     @Override  
  7.     public void run(){  
  8.     System.out.println("Hello world one!");  
  9.     }  
  10.       };  
  11.     // Lambda Runnable  
  12.     Runnable r2 = () -> System.out.println("Hello world two!");  
  13.     // Run em!  
  14.     r1.run();  
  15.     r2.run();  
  16. }  
  17. }  

代码1

Comparator接口实现

代码2是使用Lambda表达式来写一个Comparator接口。Comparator类被用于筛选集合。在下面的例子中,Person对象通过surName筛选出来一个ArrayList列表。如下是包含Person类的域值。

[java] view plaincopyJava 8与Apache IgniteJava 8与Apache Ignite
  1. public class Person {   
  2.   private String givenName;   
  3.   private String surName;   
  4.   private int age;   
  5.   private Gender gender;   
  6.   private String eMail;   
  7.   private String phone;   
  8.   private String address;  
  9. }  

代码2

代码3通过使用匿名内部类和两个Lambda表达式来应用Comparator接口。

[java] view plaincopyJava 8与Apache IgniteJava 8与Apache Ignite
  1. public class ComparatorTest {   
  2.     
  3.   public static void main(String[] args) {   
  4.        
  5.     List personList = Person.createShortList();   
  6.       
  7.     // Sort with Inner Class   
  8.     Collections.sort(personList, new Comparator(){   
  9.       public int compare(Person p1, Person p2){   
  10.         return p1.getSurName()-compareTo(p2.getSurName());   
  11.       }   
  12.     });   
  13.         
  14.     System.out.println("=== Sorted Asc SurName ===");   
  15.     for(Person p:personList){   
  16.       p.printName();   
  17.     }   
  18.         
  19.     // Use Lambda instead   
  20.         
  21.     // Print Asc   
  22.     System.out.println("=== Sorted Asc SurName ===");   
  23.     Collections.sort(personList, (Person p1, Person p2) -> p1.getSurName()-compareTo(p2.getSurName()));   
  24.     
  25.     for(Person p:personList){   
  26.       p.printName();   
  27.     }   
  28.         
  29.     // Print Desc   
  30.     System.out.println("=== Sorted Desc SurName ===");   
  31.     Collections.sort(personList, (p1,  p2) -> p2.getSurName()-compareTo(p1.getSurName()));   
  32.     
  33.     for(Person p:personList){   
  34.       p.printName();   
  35.     }   
  36.         
  37.   }   
  38. }  

代码3

我们在后面两个Collections集合中引用了Lambda表达式,Lambda表达式声明了参数类型传递给了表达式。然而,我们从第二个Lambda表达式可以看到,这个参数传递是可选的,Lambda支持“targettyping”,可以智能地从上下文中引用对象类型。因为我们正在分配一个结果给Comparator,而编译器能够将这两个参数作为Person类型来引用。

Listner接口实现

代码4是使用Lambda表达式来写一个Listener接口。

[java] view plaincopyJava 8与Apache IgniteJava 8与Apache Ignite
  1. public class ListenerTest {   
  2.   public static void main(String[] args) {   
  3.            
  4. Java 8与Apache Ignite》阅读地址:http://www.haoshilao.net/10174/

最新图文教程: