JDK8新特性之Lambda表达式和四大函数接口

在Java8中,加入了Lambda(Lambda expression),在使用它以前我们先聊聊为什么要加入Lamdba,使用它对于编程上有什么好处 

一、Lamdba的作用

1.在我们需要把一些功能传递给某些方法时,在 Java 8 以前,我们就需要去写匿名内部类。引入lambda表达式后,你可以在一个类中简便的定义参数和方法,替代大部分匿名内部类和功能接口,使得代码更加优雅,Lambda提供了一个参数列表和只用这些参数的功能体,也被称为闭包。

二、使用Lambda表达式要知道的规范

1.一个Lambda必须对应一个接口,并且这个接口是有要求的,这个接口只能被实现一个方法,如果写了多个方法,在写Lambda表达式的时候就会报不是只有一个抽象方法在接口内。无法使用lambda进行编码。

2.如何让程序知道接口是函数型的呢,需要在接口上添加@Functionallnterface注解。

三、Lambda表达式格式

1.语法形式为 () -> {},其中()为参数列表,{}为方法体,->是一个Lambda表达式,可以理解为一个箭头,为{}方法体中的方法提供参数。

首先创建两个接口

@FunctionalInterface

public interface LambdaNoreture2 {

        void method(string a,string b);

}

@FunctionalInterface

public interface LambdaNoreture1 {

        void method(string a);

}

Lambda表达式基本格式(参数a,参数b)->{方法体}

public class Lambda {

    public static void main(String[] args) {

        LambdaNoreture2 lambdaNoreture2=(String a,String b)->{

            System.out.println("Hello" + a + b +"!"); 

       }; 

       lambdaNoreture2.method("Lam","bda");

}

//输出HelloLambda!

Lambda简写方式:如果参数和方法都只有一个那么可以省略掉圆括号()和大括号{};如果多个或一个参数类型一样,可以不写参数类型,如下。

public class Lambda {

    public static void main(String[] args) {

        LambdaNoreture1 lambdaNoreture1=a->

            System.out.println("Hello" + a + b +"!");

                lambdaNoreture1.method("Lam","bda");

}

//输出HelloLambda!

四、四大接口

因为每次要用到Lambda表达式都要创建一个相应的函数式接口,很麻烦,所以JDK8贴心的给我们做好了一些函数式接口,大部分情况下我们就不用新建接口了,直接用就可以,其中我们主要学习下四个最常用的接口;

1.第一个函数式接口Function, Fcuntion接口会接收一个T(泛型)类型参数,返回R类型的结果的方法,通过调用apply方法执行内容。下面的例子是用Fcuntion来表白的例子

import java.util.function.Function;

public class LambdaFcuntion {

    public static void main(String[] args) {

        Function S=r->r*r*3.14+67.84;

        System.out.println(S.apply(12.0));

        }

}

//输出:520.0

2.Predicate接口predicate,Predicate接口是一个用于判断的接口,平常可以用来当过滤器使用,有一个参数和一个布尔类型的返回值,下面是一个判断是否成人的例子。

import java.util.function.Predicate;

public class LambdaPredicate {

    public static void main(String[] args) {

        Predicate  predicate=age->age>=18;

        System.out.println(predicate.test(5));

        System.out.println(predicate.test(20));

        }

}

//test(5)输出结果:false

//test(20)输出结果:true

3.Consume接口,Consum也叫消费接口,该接口对应的方法类型为接收一个参数,没有返回值,下面是一个例子。

import java.util.function.Consumer;

public class Consum {

    public static void main(String[] args) {

        Consumer printString = s -> System.out.println(s);

        printString.accept("消费成功,这是你的Consumer");

    }

}

//输出结果:消费成功,这是你的Consumer

4.Supplier接口, 和Consume相反,他没有参数、只有返回值,所以也叫给予接口,可以使用get()方法获得这个返回值,下面是一个例子。

import java.util.function.Supplier;

public class Supplier{

    public static void main(String[] args) {

        Supplier Supplier = () ->"I get Supplier";

        System.out.println(Supplier.get());

    }

}

//输出结果:I get Supplier

你可能感兴趣的:(JDK8新特性之Lambda表达式和四大函数接口)