Java8中lambda详解

lambda出现原因

在Java8之前是无法将方法赋值给一个变量的。Java8的一个重大特性就是引入了函数式编程,也就是变量可以被赋值为方法了,方法可以当作方法的参数和返回值,这就叫做函数式编程!

Java提供了四种函数式接口来定义函数变量,函数式接口对象通过初始化匿名内部类来实现。

名字type描述
FunctionFunction< T , R >方法接受T对象,返回R对象
ConsumerConsumer< T >方法接受T对象,不返回对象
SupplierSupplier< R >方法不接受对象,返回R对象
PredicatePredicate< T >方法接受T对象,返回boolean

下面是具体代码

Function<String,String> function = new Function<String, String>() {
     @Override
     public String apply(String s) {
         return s+s;
     }
 };

 Supplier<Integer> supplier1 = new Supplier<Integer>() {
     @Override
     public Integer get() {
         return 1;
     }
 };

 Consumer<String> consumer = new Consumer<String>() {
     @Override
     public void accept(String s) {
         System.out.println(s);
     }
 };

 Predicate<String> predicate = new Predicate<String>() {
     @Override
     public boolean test(String s) {
         if (s.equals("test")) return true;

         return false;
     }
 };

有了函数式接口,需要实现匿名内部类,构造比较麻烦啊,这时lambda就出现用场了。

lambda的名称叫做匿名函数,是一种表达函数的方式,十分简洁。

lambda用法

(parameters) -> expression

(parameters) ->{ statements; }

Function<String,String> f1 = (String s)->{return s+s;};
Supplier<Integer> s1 = ()->1;
Consumer<String> c1 = s->System.out.println(s);
Predicate<String> p1 = (s)->{
            if(s.equals("test")){
                return true;
            };
            return false;
        };

从上述代码可以看出,lambda可以极大的简洁函数的定义。

parameters是参数列表,当只有一个参数的时候,可以省略()
expression是返回值。
statements是代码语句,当statements只有一行的时候,可以省略{}。


版权声明:本文为qq_40276626原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。