lambda 笔记

 第一部分:

package com.azzan.lambda;

/**
 * 简介:
 * 1:lambda 介绍
 * 2:lambda 语法
 * 3:lambda 语法精简
 * 4:lambda 方法引用
 * 5:lambda 综合案例
 */
public class LambdaTest {
    public static void main(String[] args) {

        //lambda
        //语法结构 () -> {};
        //():方法列表
        //{}:方法体
        //->:lambda运算符 称为 goes to

        //多参有返回值
        /*
            简化前:
             LambdaOne lambdaOne = (int a, int b) -> {
                return a+b;
            };
            参数列表中的参数类型如果是多个的话,它们的参数类型要么都去掉,要么都保留,不允许一个参数有参数类型,一个参数无参数类型
         */
        //简化后:
        LambdaOne lambdaOne = (a, b) -> {
            return a+b;
        };
        int ret = lambdaOne.test(10, 20);
        System.out.println(ret);
        //语法简化:
        //因为方法体中只有一句语句,所以可以将花括号去掉,同时如果有返回值的,那么也把return去掉
        //简化前:LambdaOne lambda1 = (a,b) -> { return a+b;};
        //简化后:
        LambdaOne lambda1 = (a,b) -> a+b;
        int test = lambda1.test(11, 22);
        System.out.println(test);

        //2:多参无返回值
        LambdaTwo lambdaTwo = (a,b) -> System.out.println(a+b);
        lambdaTwo.test(20,30);

        //3:无参无返回值
        LambdaThree lambdaThree = () -> System.out.println("Hello World");
        lambdaThree.test();

        //lambda方法的引用
        //1:无参构造方法的引用
        CreateStudent createStudent = Student::new;
        createStudent.getStudent();
        //2:有参构造方法的引用
        CreatStudentInfo creatStudentInfo = Student::new;
        creatStudentInfo.getStudent("Azzan", 18);
    }
}

//创建学生调用无参构造方法
@FunctionalInterface
interface CreateStudent{

    Student getStudent();
}
//创建学生调用有参构造方法
@FunctionalInterface
interface CreatStudentInfo{
    Student getStudent(String name,int age);
}

//有多参有返回值
@FunctionalInterface
interface LambdaOne{
    int test(int a, int b);
}
//有多参无返回值
@FunctionalInterface
interface LambdaTwo{
    void test(int a, int b);
}

//无参无返回值
@FunctionalInterface
interface LambdaThree{
    void  test();
}

lambda综合案例: 

package com.azzan.lambdause;

import com.azzan.lambda.Student;

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

/**
 * lambda综合案例
 */
public class LambdaUse {
    public static void main(String[] args) {
        //ArrayList<>
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            InitStudent initStudent = Student::new;
            Student student = initStudent.getStudent("xiaoming"+i,10+ i);
            list.add(student);
        }

        System.out.println(list.toString());

        System.out.println("----------------------------");

        //排序
        //降序
        list.sort((o1, o2) -> o2.getAge()-o1.getAge());
        System.out.println(list.toString());

        test();
        testTwo();
        testThree();
        createThread();
    }

    //通过lambda开辟线程
    public static void createThread(){
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 20; i++) {
                System.out.println(i);
            }
        });
        thread.run();
    }

    //通过lambda实现集合的遍历
    public static void testThree(){
        List<Integer> list = new ArrayList<Integer>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,0);
        System.out.println(list.toString());//输出打印的元素

        //lambda实现元素的遍历
        list.forEach(ele -> System.out.println(ele));

        //lambda实现的删除集合元素
        list.removeIf(ele -> ele > 6);
        System.out.println(list.toString());

    }

    public static void test(){
        InitNum initNum = (a, b) -> a+b;
        int numCount = initNum.numCount(10, 20);
        System.out.println(numCount);
    }

    public static void testTwo(){
        //引用方法
        InitNum initNum = LambdaUse::getTotal;
        int numCount = initNum.numCount(11, 20);
        System.out.println(numCount);
    }

    //如果该方法为静态方法,static修饰,那么该方法隶属于当前类
    //如果该方法为非静态,那么该方法隶属于当前对象
    public static int getTotal(int a, int b){
        return a+b;
    }

}

@FunctionalInterface
interface InitStudent{
    Student getStudent(String name,int age);
}
@FunctionalInterface
interface InitNum{
    int numCount(int a,int b);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值