java函数式编程

lambda表达式可以理解为一种匿名函数的替代方式

lambda的要求

(1)使用lambda表达式只能是对于接口,对于抽象类或者普通类都是不能用的.

(2)并且函数式接口中只能有1个抽象方法与n个静态方法,如果存在多个抽象方法,则不能作为函数式接口(lambda)使用了lambda表达式的形式

(parameters)->expression

(parameters)->{statement;}

形式1:没有参数

()->System.out.println("hello world!");

形式2:只有1个参数

name->System.out.println(name+"hello world!");

形式3:没有参数,但是逻辑复杂

()->{

System.out.println("hello!");

System.out.println("world!");

}

形式4:包含两个参数的方法

BinaryOperator<Long>functionAdd=(x,y)->x+y;

Long result=functionAdd(1L,2L);

形式5:对参数显示声明

BinaryOperator<Long>functionAdd=(Long x,Long y)->x+y;

Long result=functionAdd(1L,2L);

函数式接口

什么样的接口才能使用lambda表达式

1.接口中只有一个抽象方法

2.java8中的函数式接口注解:@FunctionInterface

3.函数式接口的抽象方法签名:函数描述符

其中@FunctionInterface

其实作用就是提示其他人或者编译器,该接口是函数式接口,该接口内只能有一个抽象方法(默认方法不限)。当某些不知道的人 在该接口中又添加了方法时,编译器会有警告。

所以,@FunctionInterface接口仅仅只是提示作用。

 

方法引用:

1.指向静态方法的方法引用->Integer::parseInt

/**
     * (args) -> ClassName.staticMethod(args);
     * ClassName::staticMethod;
     */
    public void test1() {
        Consumer<String> consumer1
                = (String number) -> Integer.parseInt(number);

        Consumer<String> consumer2
                = Integer::parseInt;
    }

2.指向任意类型实例方法的方法引用->String::length

/**
     * (args) -> args.instanceMethod();
     * ClassName::instanceMethod;
     */
    public void test2() {
        Consumer<String> consumer1
                = (String str) -> str.length();

        Consumer<String> consumer2
                = String::length;
    }

3.指向现有对象的实例方法的方法引用->stringBuilder::append

/**
     * (args) -> object.instanceMethod(args);
     * object::instanceMethod;
     */
    public void test3() {
        StringBuilder stringBuilder = new StringBuilder();

        Consumer<String> consumer1
                = (String str) -> stringBuilder.append(str);

        Consumer<String> consumer2
                = stringBuilder::append;
    }

使用举例

Supplier<Mask> supplier = () -> new Mask("3M", "N95");
Consumer<Mask> consumer = (Mask mask) -> {
    System.out.println("Brand: " + mask.getBrand() + ", Type: " + mask.getType());
};
consumer.accept(supplier.get());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值