java8新特性

Lambda表达式 
一  基础语法: java8 引入一个新的操作符 “->” 该操作符称为操作符或lambda 操作符
                         操作符将Lambda 表达式拆分成两个部分
                         左侧:Lambda 表达式的参数列表
                         右侧:Lambda 表达式所执行的功能,即Lambda体
     语法格式一、无参,无返回值
                            () -> System.out.println("hello java8");

     语法格式二、有一个参数,并且无返回值 (若参数只有一个 小括号可以不写)
                            (x)->   System.out.println(x);
                           例 有个Student 接口 里面只有一个方法 void student(T t);
                           Student<String> s =  (x)->   System.out.println(x);
                            s. student(“hello”);
                            即打印出hello
 
        语法格式三:有两个以上的参数,有返回值,并且Lambda体中有多条语句
                            注意:该接口必须是函数式接口 即接口内部只有一个方法
 
         语法格式四:有两个以上的参数,有返回值,并且Lambda体中有一条语句     return 和大括号可以不写

          语法格式五:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM可以根据上下文推断出数据类型,即“类型推断”


二、四大内置核心函数式接口 
         1、Consumer<T> : 消费型接口 (无返回值)
                           void accept(T t);
         2、Supplier<T>     :  供给型接口 (有返回值)
                            T get();
         3、Function(T,R)  :   函数型接口 (有参,有返回值)
                            R apply(T t);
         4、Predicate<T>  :   断言型接口 (做判断操作)
                            boolean test(T t);

注意:函数式接口 是一个接口 里面有且仅有一个方法,如在接口上部添加 @FunctionalInterface  注解,若如此 此接口在写一个未实现的方法是不会通过编译
  1、Consumer<T> : 消费型接口 (无返回值)
                           void accept(T t);


    2、Supplier<T>     :  供给型接口 (有返回值)
                            T get();
 

     3、Function<T,R>  : 函数型接口
                            R apply(t)

     4、Boolean   Predicate<T> : 断言型函数接口
                          boolea test(t);
 
三、方法引用:若Lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”
                         (可以理解为方法引用是Lambda 表达式的另外一种表现形式)
                主要有三种语法格式:
                    对象::实例方法
                    类::静态方法
                    类::实例方法
        注意:1、Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值类型保持一致;
                 2、若Lambda 参数列表中的第一个参数是实例方法的调用者,第二个参数是实例方法的参数时,可以使用 ClassName  :: method  )
        注: 这方面知识点想要熟练使用要十分熟悉java类库或项目中的方法,方法引用需要返回值和参数全部对应上。本人水平,阅历经验需要加强,无法信手拈来java内部的方法,现实项目中可以用自己编写的方法。
    // 对象::实例方法
    @Test
    public void test5() {
        Person person = new Person(10, "张三");
        Consumer<String> consumer = person::setName;
        consumer.accept("abcedf");
        System.out.println(person.getName());
    }
    此处程序结果为 abcdedf 。    ( 留个映像,每次编程往这上面靠,时间长了也就掌握了)
    // 类::静态方法
    @Test
    public void test6() {
        Comparator<Integer> comparable = Integer::compare;
        int num = comparable.compare(100, 20);
        System.out.println(num);
    }
     此处程序结果为1  
    // 类::实例方法
    @Test
    public void test7() {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值