java基础--Lambda

1.优化多线程的代码繁琐问题:

public static void main(String[] args){
       //使用匿名内部类的方式实现多线程
       new Thread(new Runable(){
       @override
       public void run(){
       System.out.println(Thread.currentThread.getName()+"新线程创建了");
}
}).start();
       //使用Lambad表达式实现多线程
       new Thread(()->{
       System.out.println(Thread.currentThread.getName()+"新线程创建了");
}).start();
     
}        

结果都能正常执行

2.Lambda的标准格式

 

 

3.Lambda的无参无返回值方式实现:

package com.zhs.lambda;

public class DemoLambda {
    public static void main(String[] args) {
    //调用invokefood()方法,参数是接口传递接口的匿名内部类对象
        invokefood(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("吃饭了?");
            }
        });

    //使用Lambda方式实现
        //()表示重写的接口方法,->表示传递的意识,将参数传递给方法体{}
        invokefood(()->{
            System.out.println("Lambda吃饭了");
        });
    }
    //定义一个invokefood()方法,参数传递的是接口,调用接口的方法
    private static  void invokefood(Cook cook){
        cook.makeFood();
    }
}

4.Lambda的有参有返回值

创建一个Person类:

package com.zhs.lambda;

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

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

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

    public int getAge() {
        return age;
    }

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

编写测试类:

package com.zhs.lambda;

import java.util.Arrays;
import java.util.Comparator;

public class PersonArrDemo {
    public static void main(String[] args) {
        //使用数组存储多个person对象
        Person []arr={
                new Person("张三", 16),
                new Person("王五", 23),
                new Person("李四", 15),
        };
        //使用Arrays数组的sort方法进行升序排序,传递参数为arr,和Comparator接口
//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                //对年龄升序排序(01.getAge-o2.getAge)
//                return o1.getAge()-o2.getAge();
//            }
//        });

        //使用lambda方式实现
        Arrays.sort(arr,(Person o1,Person o2)->{
            return o1.getAge()-o2.getAge();
        });
        //增强for循环打印输出
        for (Person person : arr) {
            System.out.println(person);
        }
    }

}

5.有参数有返回值;计算两数之和

定义接口:

package com.zhs.lambda;

public interface Calcaulate {
     abstract int calc(int a,int b);
}

测试类:

package com.zhs.lambda;

public class DemoCalcautor {
    public static void main(String[] args) {
        //使用Lambda方式;
        invokecalc(10,20,(int a,int b)->{
            return  a+b;
        });
    }
    //定义一个invokeCalcutor
    public static  void invokecalc(int a,int b,Calcaulate calcaulate){
        int result = calcaulate.calc(a,b);
        System.out.println("结果是:"+result);
    }
}

 

posted @ 2020-11-03 20:56  lemmon_water  阅读(125)  评论(0)    收藏  举报