Java 8 Lambda 表达式

本文将用以下几类做介绍:

  1. 可以用来做什么
  2. 使用方法
  3. 属性
  4. 理论知识、注意事项
  • 可以用来做什么

可以简化代码,最直观的感受就是在实现接口的时候简化代码,而适用于lambda表达式的接口称之为函数型接口(接口里只有一个抽象方法),这种类型的接口也称为SAM接口

  • 使用方法

  • 引入java8

按CTRL+SHIFT+ALT+S(File\Project Structure)打开

  •  使用示例
接口定义
    interface GetTime {
        void getTime(String hours, String minutes);
    }
实现接口中的方法,context后面的那个参数既为实现接口中的方法
            private void setTextTime(final int textId) {
                WindowUtils.getTimePickerDialog(context, (hours, minutes) -> {
                    String selectValue;
                    if (textId == R.id.tv_office_time_value) {
                        selectValue = DateUtils.getLiveUnit(Integer.parseInt(hours)) + hours + "点" + minutes + "分上班";
                        selectBuilder.append(selectValue);
                    } else {
                        selectValue = DateUtils.getLiveUnit(Integer.parseInt(hours)) + hours + "点" + minutes + "分下班";
                        selectBuilder.append("至").append(selectValue);
                    }
                    setTextValue(popUpView, textId, selectValue);
                }).show();
            }
  • 属性

  • Lambda 表达式的基础语法
Java8 中引入了一个新的操作符 -> 箭头操作符将 Lambda 表达式拆分成两部分:
1.操作符左侧:抽象方法的参数名,用(参数名列表)表达,不声明数据类型, 参数名称可自定义,示例:
(message,message1) -> {System.out.println("Hello " + message);{System.out.println("Hello " + message1);}
如果没有参数值则必须加(),示例:
() -> System.out.println("Hello message");
如果只有一个参数可不加(),示例:
message -> System.out.println("Hello " + message);
2.操作符右侧:Lambda 表达式中需要执行的功能,即方法的实现,如果方法体中只有一行代码,可不加大括号,示例:
() -> System.out.println("Hello message");
多行代码需要用大括号括起来,示例:
() -> {System.out.println("Hello " + message);{System.out.println("Hello " + message);}
有返回值用return返回,示例:
    Comparator<Integer> com = (x, y) -> {
        System.out.println("test");
        return Integer.compare(x, y);
    };
如果Lambda体中只有一条语句,并且有返回值,return和大括号都可以省略不写,示例:
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
  • 理论知识、注意事项 

接口要想支持Lambda表达式,该接口必须为函数式接口
函数式接口:
接口中只有一个抽象方法的接口,称为函数式接口。可以使用注解 @FunctionalInterface 修饰,可以检查是否是函数式接口
函数式接口可以有默认方法和静态方法。
任何满足单一抽象方法法则的接口,都会被自动视为函数接口。这包括 Runnable 和 Callable 等传统接口,以及您自己构建的自定义接口。
FunctionalInterface注解:
Java 8为函数式接口引入了一个新注解@FunctionalInterface,该注解对于接口是不是函数式接口没有影响,只是提醒编译器去检查该接口是否只包含一个抽象方法,函数式接口里是可以包含默认方法,示例:
    @FunctionalInterface
    interface GetTime {
        void getTime(String hours, String minutes);
    }

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值