JDK1.8的新特性

概述

  • Java8 (又称 JKD1.8) 是 Java 语言开发的一个主要版本。
  • Oracle公司于2014年3月18日发布Java8 。
    • 支持Lambda表达式
    • 函数式接口
    • 新的Stream API
    • 新的日期 API
    • 其他特性

Lambda表达式

概述

  • Lambda表达式是特殊的匿名内部类,语法更简洁。
  • Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据一样传递。
  • 基本优化如下:
        //1,创建匿名内部类
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {

            }
        };
        //2,lambd的优化
        Runnable runnable2 = () -> {
          System.out.println("启动了一个线程");
        };

使用规则

  • Lambda表达式主要针对的是接口
  • 接口中只有一个抽象方法,为了监测是否可以使用lambda表达式,可以使用@FunctionalInterface会检测当前接口是否可以使用lambda表达式
@FunctionalInterface
public interface Father {
    public void say();
    //public void get();
}

Lambda参数的使用

  • 创建一个带参数的方法接口
@FunctionalInterface
public interface Father2 {
    public void say(String name,int age);
}

使用lambda表达式的代码实现

    /*
        Father2 father2 = new Father2() {
            @Override
            public void say(String name, int age) {

            }
        };
         */
        //lambda表达式传递的是形参
        Father2 father2 = (name, age) -> {
            System.out.println("我的名字是"+name+",年龄:"+age);
        };

        //通过接口调用方法的时候是实参
        father2.say("小明",15);

lambda表达式的返回值

  • 定义带返回参数的接口方法
public interface Father3 {
    int plus(int a,int b);
}

lambda表达式的调用

   /*
        Father3 father3 = new Father3() {
            @Override
            public int plus(int a, int b) {
                return a+b;
            }
        };*/
        Father3 father4 = (a, b) -> {
            System.out.println("aa");
            return a+b;
        };
        //如果只有一行代码可以省略return和{}
        Father3 father3 = (a, b) -> a+b;

应用场景

遍历集合的lambda表达式的应用

 List<String> list=  new ArrayList<>();
        for (int i=0;i<10;i++){
            list.add("a"+i);
        }
        //常规用法
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //使用lambda表达式进行遍历
        list.forEach(s->{
            System.out.println(s);
        });

使用了lambda表达式之后,this的性质会发生变化

 int a;
    public void test(){
        List<String> list=  new ArrayList<>();
        //使用lambda表达式进行遍历
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                //this代表的是 new Consumer()对象
            }
        });
        list.forEach(s -> {
            //如果使用了lambda表达式,
            // this代表当前方法所在的对象
            this.a = 5;
        });
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Latity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值