1.7lambda表达式

1.7Lambda表达式

1.概念

lambda表达式可以看做是一个Object(匿名内部类),它的目标类型为函数式接口(只有一个未实现的方法的抽象类/接口)

2.语法

(1)参数、箭头、代码段

()-> {}

(2)注意事项

  • 参数
    • (x,y):两个及两个以上参数必须要有()
    • x:一个参数可以不用()
    • ():代表没有入参
  • 代码段
    • 如果只有一行代码可以不用{}
    • 有返回值必须要加{}
    • 多行代码必须要加{}

3.使用

(1)变量隐蔽

①lambda表达式和外部包围块(第一层包围块)用的是同一个变量域
②lambda表达式只能使用外部包围块不变的变量(final修饰或没有修改的变量)

(2)this指代:表达式中的this为创建这个表达式的外部包围块的this

(3)填充函数式接口


4.函数式接口

(1)概念

一个接口/抽象类,只有一个未实现的方法,那么这个接口可以被称为函数式接口

(2)四大内置函数式接口

①Predicate<T>:断言型接口(boolean test(T t))
package learn01;

import java.util.function.Predicate;

/**
 * @author zhangshiqin
 * @date 2022/1/17 - 15:09
 * @description:
 */
public class FunctionInterface {

    //1.Predicate<T>
    public static boolean test(String args, Predicate<String> predicate){
        return predicate.test(args);
    }

    public static void main(String[] args) {
        //1.断言型函数式接口   a = "money"
        System.out.println(FunctionInterface.test("money", a -> a.endsWith("y")));
    }
}

②Consumer<T>:消费型函数式接口( void accept(T t) )
package learn01;

import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * @author zhangshiqin
 * @date 2022/1/17 - 15:09
 * @description:
 */
public class FunctionInterface {

    //2.Consumer<T>
    public static void accept(String args, Consumer<String> consumer){
        consumer.accept(args);
    }

    public static void main(String[] args) {
        FunctionInterface.accept("James",a->{
            System.out.println(a);
        });
    }
}

③Supplier<T>:供给型接口(T get())
package learn01;

import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author zhangshiqin
 * @date 2022/1/17 - 15:09
 * @description:
 */
public class FunctionInterface {

    //3.Supplier<T>
    public static <T> T get(String args, Supplier<T> supplier){
        return supplier.get();
    }

    public static void main(String[] args) {
        System.out.println(FunctionInterface.get("abc", () -> 123));
    }
}

④Function<T,R>:函数型接口( R apply(T t) )
package learn01;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author zhangshiqin
 * @date 2022/1/17 - 15:09
 * @description:
 */
public class FunctionInterface {

    //4.Function<T,R>
    public static <T,R> R apply(T args, Function<T,R> function){
        System.out.println(function.apply(args));
        return function.apply(args);
    }

    public static void main(String[] args) {
        FunctionInterface.apply("money",a->a.hashCode());
    }
}

return function.apply(args);
}

public static void main(String[] args) {
    FunctionInterface.apply("money",a->a.hashCode());
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值