当前位置:   article > 正文

JUC-11. 四种函数式接口_java 11函数式编程自带的函数式接口

java 11函数式编程自带的函数式接口

想了解更多JUC的知识——JUC并发编程合集

11. 四种函数式接口

  • Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口。它们主要在java.util.function包中。

  • 可以大致分为四种类型:

    .

    • Function:功能型函数接口

    • Predicate:断言型接口

    • Suppier:供给型接口

    • Consumer:消费型接口

1. Function接口

  • Function接口是对实例进行处理转换的接口,定义了一个名叫apply()的抽象方法,传入一个泛型T对象,并返回一个泛型R对象

    .

  • 案例

    public class FunctionTest {
        public static void main(String[] args) {
            //传入一个数字,返回平方
            Function<Integer, Integer> function = (num) -> {
                return num * num;
            };
            System.out.println(function.apply(10));//100
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • Function相关的接口

    接口名称方法名称方法前面
    Functionapply(T) => R
    BiFunctionapply(T, U) => R
    DoubleFunctionapply(double) => R
    DoubleToIntFunctionapplyAsInt(double) => int
    DoubleToLongFunctionapplyAsLong(double) => long
    IntFunctionapply(int) => R
    IntToDoubleFunctionapplyAsDouble(int) => double
    IntToLongFunctionapplyAsLong(int) => long
    LongFunctionapply(long) => R
    LongToDoubleFunctionapplyAsDouble(long) => double
    LongToIntFunctionapplyAsInt(long) => int
    ToDoubleFunctionapplyAsDouble(T) => double
    ToDoubleBiFunctionapplyAsDouble(T, U) => double
    ToIntFunctionapplyAsInt(T) => int
    ToIntBiFunctionapplyAsInt(T, U) => int
    ToLongFunctionapplyAsLong(T) => long
    ToLongBiFunctionapplyAsLong(T, U) => long

2. Predicate接口

  • Predicate接口是判断是与否的接口,定义了一个名叫test的抽象方法,传入一个泛型T对象,并返回一个boolean类型

    .

  • 案例

    public class PredicateTest {
        public static void main(String[] args) {
            Predicate predicate = (Object str)->{
                return "a".equals(str);
            };
    
            System.out.println(predicate.test("a"));//true
            System.out.println(predicate.test("A"));//false
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 与Predicate相关的接口

    接口名称方法名称方法签名
    Predicatetest(T) => boolean
    BiPredicatetest(T, U) => boolean
    DoublePredicatetest(double) => boolean
    IntPredicatetest(int) => boolean
    LongPredicatetest(long) => boolean

3. Supplier接口

  • Supplier接口是对象实例的提供者,定义了一个名叫get的抽象方法,它不用传入参数,并返回一个泛型T对象

    .

  • 案例

    public class FunctionInterfaceTest {
        public static void main(String[] args) {
            Supplier<Car> supplier = ()->{
                return new Car("奔驰",1000);
            };
            //用supplier的get方法创建car对象
            Car car = supplier.get();
            System.out.println(car.getName() + "的价钱为:" + car.getPrice());
        }
    }
    
    //一个汽车类,有两个属性:车名和价钱
    class Car{
        private String name;
        private Integer price;
    
        public Car(String name, Integer price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getPrice() {
            return price;
        }
    
        public void setPrice(Integer price) {
            this.price = price;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 与Supplier相关的接口

    接口名称方法名称方法签名
    Supplierget() => T
    BooleanSuppliergetAsBoolean() => boolean
    DoubleSuppliergetAsDouble() => double
    IntSuppliergetAsInt() => int
    LongSuppliergetAsLong() => long

4. Consumer接口

  • Consumer接口是一个类似消费者的接口,定义了一个名叫accept的抽象方法,传入一个泛型T对象,没有返回值

    .

  • 案例

    public class FunctionInterfaceTest {
    
        public static void main(String[] args) {
            Supplier<Car> supplier = ()->{
                return new Car("奔驰",1000);
            };
            Consumer<Car> consumer = (Car car)->{
                System.out.println(car.getName() + "的价钱为:" + car.getPrice());
            };
            consumer.accept(supplier.get());
        }
    }
    
    //一个汽车类,有两个属性:车名和价钱
    class Car{
        private String name;
        private Integer price;
    
        public Car(String name, Integer price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getPrice() {
            return price;
        }
    
        public void setPrice(Integer price) {
            this.price = price;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 与Consumer相关的接口

    接口名称方法名称方法签名
    Consumeraccept(T) => void
    DoubleConsumeraccept(double) => void
    IntConsumeraccept(int) => void
    LongConsumeraccept(long) => void
    ObjDoubleConsumeraccept(T, double) => void
    ObjIntConsumeraccept(T, int) => void
    ObjLongConsumeraccept(T, long) => void
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/411645
推荐阅读
相关标签
  

闽ICP备14008679号