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)和自定义。