Java函数式编程、lambda表达式

Java函数式编程、lambda表达式

Java8开始支持函数式编程、包括lambda表达式、Stream流。java

函数式编程用于简化开发,对于某些类,或许只使用一次,那么就不必对其进行单独的实现一个类,java本来提供了简化的方案,如内部类、匿名内部类等。编程

lambda对此更加简化。app

函数式接口

函数式接口就是只有一个方法的接口,想一想函数是否是一个个是独立的。jvm

Runnable接口就是一个函数式接口,以下:函数式编程

@FunctionalInterface
public interface Runnable {
 
    public abstract void run();
}


//@FunctionalInterface注解表明这是一个函数式接口,但不是必须的,加上注解jvm会帮助检查。
// public abstract void run();中的abstract也能够省略,接口中的方法本就是抽象方法

使用了函数式接口后,就不须要实现类,直接使用lambda便可。函数

lambda表达式

lambda用于替代实现类,形式以下:spa

FunctionalInterface func=()->{
           ......
        };

实例

函数式接口

@FunctionalInterface
interface Func{

    void  hello();
}

lambda表达式

public class LambdaDemo  {

    public static void main(String[] args) {
        Func func=()->{
            System.out.println("hello");//lambda表达式

        };

         func.hello();//调用方法

    }
}

带返回值

直接在抽象方法前加上返回类型,在lambda中有返回值便可。code

public class LambdaDemo  {

    public static void main(String[] args) {
        Func func=()->{
            System.out.println("hello");
            return "ok lambda";

        };

        String s = func.hello();
        System.out.println(s);

    }
}


@FunctionalInterface
interface Func{

    String  hello();
}

带参数

参数声明在抽象方法中,在lambda中加上类型便可:接口

public class LambdaDemo  {

    public static void main(String[] args) {
        Func func=(int a,String c)->{
            System.out.println("hello"+a+c);
            return "ok lambda";

        };

        String s = func.hello(8,"yes");
        System.out.println(s);

    }
}

lambda中的数据类型能够略去开发

Func func=( a,c)->{
            System.out.println("hello"+a+c);
            return "ok lambda";

        };

若是只有一个参数的话,连()均可以省略。

public class LambdaDemo  {

    public static void main(String[] args) {
        Func func=c->{            //lambda省去()
            System.out.println("hello "+c);
            return "ok lambda";

        };

        String s = func.hello("yes");
        System.out.println(s);

    }
}


@FunctionalInterface
interface Func{

    String  hello(String b);
}

内置函数式接口

JDK 1.8为咱们预约义了许多函数式接口,它们位于java.util.function包中。

经常使用的以下:

序号 接口名 抽象方法 说明
1 Supplier<T> Tget() 无输入参数,经过一系列操做产生一个结果返回
2 Consumer<T> voidaccept(Tt) 一个输入参数,针对参数作一系列操做,无返回值
3 Function<T,R> Rapply(Tt) 一个参数,一个返回值,针对参数生成一个返回值
相关文章
相关标签/搜索