美文网首页
Java中的函数式接口及Lambda表达式

Java中的函数式接口及Lambda表达式

作者: DASH_1024 | 来源:发表于2019-07-21 22:54 被阅读0次

    C++,C#,Python等各个编程语言早已经支持lambda表达式了,Java从java8开始也支持Lambda表达式了,其中在java.util.function 包中提供给我们一些最常用的函数式接口。

    四个最基本的函数式接口

    Function<T, R>:R apply(T t)  输入类型T返回类型R。
    Consumer<T>:void accept(T t)  输入类型T,“消费”掉,无返回。
    Predicate<T>:boolean test(T t)  输入类型T,并进行条件“判断”,返回true|false。
    Supplier<T>:T get()  无输入,“生产”一个T类型的返回值。
    

    基本数据类型的函数式接口

    上面的四个接口因为使用泛型,Java泛型不支持基本数据类型,又因为基本数据类型与引用类型频繁的拆装箱将会严重影响效率,所以有Java还提供了几个基本数据类型的函数式接口:

    double类型的函数式接口

    DoubleFunction<R>:R apply(double value);
    DoubleConsumer:void accept(double value);
    DoublePredicate:boolean test(double value);
    DoubleSupplier:double getAsDouble();
    

    int类型的函数式接口

    IntFunction<R>:R apply(int value);
    IntConsumer:void accept(int value);
    IntPredicate:boolean test(int value);
    IntSupplier:int getAsInt();
    

    long类型的函数式接口

    LongFunction<R>:R apply(long value);
    LongConsumer:void accept(long value);
    LongPredicate:boolean test(long value);
    LongSupplier:long getAsLong();
    

    boolean类型的函数式接口

    BooleanSupplier:boolean getAsBoolean();
    

    二元函数式接口

    BiFunction<T, U, R>:R apply(T t, U u);
    BiConsumer<T, U>:void accept(T t, U u);
    BiPredicate<T, U>:boolean test(T t, U u);
    

    Lambda表达式语法

    (int x, int y) -> { return x + y; }
    

    其中(int x, int y)为参数列表, {return x + y}为函数体,中建用箭头“->”连接起来。下面列举一些示例:

    // 多个参数
    (type1 arg1, type2 arg2...) -> { body }
    
    (int a, int b) -> {  return a + b; }
    
    // 可以显式声明参数的类型,也可以从上下文推断参数的类型。
    (arg1, arg2...) -> { body }
    
    (a, b) -> { return a + b; }
    
    // 一个参数
    (a) -> { return a * a; }
    // 参数列表只有一个参数可以省略:参数列表的小括号
    a -> { return a * a; }
    // 方法体只有一条语句可以省略:方法体大括号以及return关键字
    a -> a * a;
    
    // 没有参数,需要用一对空括号来表示
    () -> return 1;
    

    相关文章

      网友评论

          本文标题:Java中的函数式接口及Lambda表达式

          本文链接:https://www.haomeiwen.com/subject/utkblctx.html