JDK8的新特性lambda表达式

  • Post author:
  • Post category:其他


1. Lambda表达式。

2. 接口中新的成员。

3. 方法引用。

4. stream流

lambda表达式

匿名内部类: 可以直接创建接口的类对象。

package demo01;

/**
 * @program: JDK8
 * @description:
 * @author: 阿木
 * @create: 2022-02-14 08:36
 **/
public class Test01 {
    public static void main(String[] args) {
         USB usb=new Upan(); //如果该对象只使用一次。为了这一次 你必须创建一个该接口的实现类。
         usb.show();

         USB usb1=new USB() { //匿名内部类。
             @Override
             public void show() {
                 System.out.println("匿名内部类");
             }
         };
         usb1.show();
    }
}
interface  USB{
     public void show();
}
class Upan implements  USB{

    @Override
    public void show() {
        System.out.println("U盘");
    }
}

需求:

package demo01;

/**
 * @program: JDK8
 * @description:
 * @author: 阿木
 * @create: 2022-02-14 08:40
 **/
public class Test02 {
    public static void main(String[] args) {
          Runnable r1=new Runnable() {
              @Override
              public void run() {
                  System.out.println("Hello");      
              }
          };
          Thread t1=new Thread();//可以使用任务对象的构造函数Runnable
          t1.start();
    }
}

分析代码:

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

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

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

  4. 必须覆盖重写抽象的run方法,所有的方法名称,方法参数,方法返回值不得不都重写一遍,而且不能出错,

  5. 而实际上,我们只在乎方法体中的代码

我们可以使语法更加简介,可以使用lambda表达式。

lambda表达式的语法

接口名 对象名=(参数名,参数名….)->{方法体}

lambda表达式由三部分

1.左侧 参数列表()

2.运算符 ->

3.右侧 {方法体}

    public static void main(String[] args) {
//          Runnable r1=new Runnable() {
//              @Override
//              public void run() {
//                  System.out.println("Hello");
//              }
//          };

          Runnable r1=()->{
              System.out.println("lambda表达式");
          };

          Thread t1=new Thread(r1);//可以使用任务对象的构造函数Runnable
          t1.start();
    }

lambda表达式使用的前提:

  1. 方法的参数类型为接口类型。

  2. 接口中有且仅有一个抽象方法。函数式接口@FunctionInterface

package demo01;

/**
 * @program: JDK8
 * @description:
 * @author: 阿木
 * @create: 2022-02-14 08:52
 **/
public class Test03 {
    public static void main(String[] args) {
        
        // MyIn myIn=(b)->System.out.println("我的年龄=="+b);

//         fun(myIn);
          MyIn2 myIn2=(a)->{
              return "我的身高:"+a;
          };
         fun2(myIn2);
    }
    //传递的接口参数有参有返回值
    public static void fun2(MyIn2 myIn2){
        String show = myIn2.show(175);
        System.out.println(show);
    }

    public static void fun(MyIn myIn){
         myIn.info(15);
    }
}
interface MyIn{
    public void info(int a);
}
interface MyIn2{
     public String show(int a);
}

注意: 如果方法体中有且仅有一条语句,那么可以省略{} 如果这条语句为return 那么可以省略return.

package demo01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @program: JDK8
 * @description:
 * @author: 阿木
 * @create: 2022-02-14 09:22
 **/
public class Test04 {
    public static void main(String[] args) {
         List<Student> list=new ArrayList<>();
         list.add(new Student("张三",18));
         list.add(new Student("李四",16));
         list.add(new Student("王二",19));
         list.add(new Student("麻子",17));
         System.out.println(list);
         //对集合中的元素按照年龄排序
//        Comparator<Student> comparator=new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return o1.getAge()-o2.getAge();
//            }
//        };
        Comparator<Student> comparator=(o1,o2)->o1.getAge()-o2.getAge();
        Collections.sort(list,comparator);
        System.out.println("排序后的结果===================");
        System.out.println(list);
    }
}
class Student{
     private String name;
     private int age;

    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;
    }

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

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



版权声明:本文为qq_61587842原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。