JDK8新特性

本文详细介绍了JDK8的新特性,重点讲解了Lambda表达式的概念、语法,以及无参无返回值和有参有返回值的情况。同时,文章探讨了函数式接口,包括Consumer、Supplier、Function和Predicated。此外,还深入讨论了方法引用,如静态、实例和构造方法引用。文章进一步阐述了Stream流的引入原因、原理和获取Stream流对象的方法,并列举了常见的Stream API,如filter、map、reduce等。最后,提到了JDK8新增的日期时间类。
摘要由CSDN通过智能技术生成

一、Lambda表达式

目录

一、Lambda表达式

(1)概念

(2)语法

二、无参无返回值

三、有参有返回值

四、详细介绍lambda表达式

五、函数式接口 

(1)内置函数式接口的由来

(2)Consumer有参无返回值

(3)Supplier供给型函数式接口

(4)Function 函数型函数式接口,r>

(5)Predicated断言型函数式接口

五、方法引用

  (1)静态方法引用

(2)实例方法引用

(3)构造方法引用: 类名::new         (参数)->new 类名(参数)

(4)比较两个字符串的内容是否一致


     Lambda表达式:特殊的匿名内部类,语法更简洁

     Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据一样传递

(2)语法

  <函数式接口><变量名>=(参数1,参数2)->{

     //方法体

};

注意: 函数式接口:接口中只有一个抽象方法。

 (参数1,参数2): 抽象方法的参数

: 分隔符

{}:表示抽象方法的实现

public static void main(String[] args) {
        //匿名内部类
       My my=new My() {
           @Override
            public void eat() {
                System.out.println("猜猜我是谁");
            }
        };
        fun(my);

        fun(()->{
            System.out.println("使用lambda表达式");
        });
    }
    public static void fun(My m){
        m.eat();
    }
}
//函数式接口
interface My{
    public void eat();
}

分析代码:

Thread 类需要 Runnable 接口作为参数,其中的抽象 run 方法是用来指定线程任务内容的核心

  为了指定 run 的方法体,不得不需要 Runnable 接口的实现类  

  为了省去定义一个 Runnable 实现类的麻烦,不得不使用匿名内部类

必须覆盖重写抽象 run 方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错 

  而实际上,似乎只有方法体才是关键所在。

//lambda表达式
        Runnable task03 =  ()-> {
            System.out.println("这是使用Lambda表达式完成的");
        };

        Thread t3=new Thread(task03);
        t3.start();

二、无参无返回值

//无参无返回值
public class Test {
    public static void main(String[] args) {
        fun(()->{
            System.out.println("这是lambda表达式");
        });
    }
    public static void fun(Swimm s){
        s.swimm();
    }
}
//函数式接口
interface Swimm{
    public void swimm();
}

三、有参有返回值

当需要对一个对象集合进行排序时, Collections.sort 方法需要一个 Comparator 接口实例来指定排序的规则

//有参有返回值
public class Test02 {
    public static void main(String[] args) {
        List<Student> list=new ArrayList<>();
        list.add(new Student("张三",12,"男") );
        list.add(new Student("刘能",45,"男") );
        list.add(new Student("广坤",16,"男") );
        list.add(new Student("赵四",48,"男") );
       Comparator <Student> comparator =( o1,o2)->{
            return o1.getAge()- o2.getAge();
        };
        Collections.sort(list,comparator);
        for(Student s: list){
            System.out.println(s);
        }
    }
}
class Student{
    private String name;
    private int age;
    private String sex;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

四、详细介绍lambda表达式

五、函数式接口 

(1)内置函数式接口的由来

//内置式函数式接口
public class Test03 {
    public static void main(String[] args) {
       Count a=arr->{
           int sum=0;
           for(int i:arr){
               sum+=i;
           }
           System.out.println("和:"+sum);
       };
       fun(a);
    }
    public static void fun(Count c){
        int[] arr={1,56,12,4564,13,14};
        c.getSum(arr);
    }
}
@FunctionalInterface
interface Count{
    public abstract void getSum(int[] arr);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值