JDK1.8新特性之Lambda表达式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、Lambda表达式是什么?

Lambda是一个匿名函数,Lambdab表达式可以理解为是一段可以传递的代码。使用Lambda表达式可以写出更简洁、更灵活的代码。

    @Test
    public void test1() {

        //  匿名内部类
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello Lambda");
            }
        };
        r1.run();

        System.out.println("----------------");

        // Lambda 表达式
        Runnable r2 = () -> System.out.println("Hello Lambda");
        r2.run();
    }

二、函数式接口

使用Lambda表达式的前提是具有函数式接口。只包含一个抽象方法的接口,称为函数式接口。

Java已经帮我们内置了四大函数式接口:

消费型接口:有参,无返回值

        Consumer<T> :void accept(T t)

供给型接口:无参,有返回值

        Supplier<T>:T get()

函数型接口:有参,有返回值

        Function<T,R>:R apply(T t)

断言型接口:有参,返回boolean

        Predicate<T>:boolean test(T t)

其他函数型接口:

接口名称参数类型返回类型用途
BiFunction<T, U, R>T, UR
对类型为 T, U 参数应用
操作, 返回 R 类型的
结 果。包含方法为
R apply(T t, U u)
UnaryOperator<T> (Function子
接口)
TT
对类型为T的对象进行一
元运算, 并返回T类型的
结果。包含方法为
T apply(T t)
BinaryOperator<T>T, TT
对类型为T的对象进行二
元运算,并返回T类型的
结果。包含方法为
T apply(T t1, T t2)
BiConsumer<T, U>T, Uvoid
对类型为T, U 参数应用
操作。包含方法为
void accept(T t, U u)

ToIntFunction<T>

ToLongFunction<T>

ToDoubleFunction<T>

T

int

long

double

分 别 计 算 int 、 long 、
double值的函数

IntFunction<R>

LongFunction<R>

DoubleFunction<R>

int

long

double

R
参数分别为int、long、
double 类型返回值为R的函数

三、Lambda表达式的语法

Lambda在Java语言中引入了一个新的语法元素和操作符,这个操作符为"->",它将Lambda分为两个部分:

左侧:表达式的参数列表

右侧:表达式中所需执行的功能,即Lambda体(相当于接口的实现方法)

语法格式一:有参,无返回值

     /**
     * Consumer<T> 消费型接口
     */
    @Test
    public void test1() {

        Consumer<String> consumer = (e) -> System.out.println(e);
        consumer.accept("Hello Lambda");

    }

语法格式二:有参,无返回值

    /**
     * Supplier<T> 供给型接口
     */
    @Test
    public void test2(){
        List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 1000));
        numList.forEach(x -> System.out.println(x));
    }

    // 产生指定个数的整数,并放入到集合中
    public List<Integer> getNumList(Integer num, Supplier<Integer> supplier) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i ++) {
            list.add(supplier.get());
        }

        return list;
    }

语法格式三:有参,有返回值

    /**
     * Function<T, R> 供给型接口
     *
     */
    @Test
    public void test3() {
        String s = strHandler(" 字符串前后去除空格 ", (x) -> x.trim());
        System.out.println(s);
    }

    // 处理字符串
    public String strHandler(String str, Function<String, String> function) {
        return function.apply(str);
    }

语法格式四:有参,返回boolean

    /**
     * Predicate<T> 断言型接口
     */
    @Test
    public void test4() {
        boolean test = test(100, (num) -> {
            if (100 % 4 == 0) {
                return true;
            } else {
                return false;
            }
        });

        System.out.println(test);
    }

    //判断整数能否被4整除
    public boolean test(Integer num, Predicate<Integer> predicate) {
        return predicate.test(num);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值