JDK1.8新特性 1、Lambda 2、Stream类
Lambda的语法目前仅对于只有一个抽象方法的接口。
在Lambda项目中,早期称为SAM类型(SAM = single abstract method 单一抽象方法)。在jdk1.8中,叫函数接口(functional interface)。比如Runnable,Callable,Comparator。
lambda语法包含三部分:a、参数列表;b、箭头符号“->”;c、代码块。
(arg1,arg2)->{Statement};
只有一个参数可以写成:arg->{Statement};
代码块类似方法体,return语句将控制权交还给匿名方法(即Lambda表达式)的调用者。如果代码块只有一行,可以省略return关键字和{}括号。
1 import java.util.Comparator; 2 public class TestLambda { 3 public static void main(String[] args) { 4 Runnable r = ()->{System.out.println("hello world");}; 5 Comparator<String> c = (String s1,String s2)->s2.length()-s1.length(); 6 r.run(); 7 System.out.println(c.compare("s1", "12323")); 8 } 9 }
结果是:
1 hello world 2 3
我们也可以自定义函数接口
1 public class TestLambda { 2 interface testlambdainterface{ 3 public void me(String str); 4 } 5 public static void main(String[] args) { 6 testlambdainterface tli = (String s)->{System.out.println(s);}; 7 tli.me("hello world"); 8 } 9 }
2、Stream类
提供了只保存算法的一个类,是一个高版本的Iterator。
可以通过Collection.stream()方法产生,静态方法LongStream.of(1,2,3,4)和自定义。