Lambda表达式的学习

package main.java.com.founder.study.lamada;

//Lambda表达式是一个匿名函数,Lambda是一段可以传递的代码(能够做到将代码像数据一样进行传递)。

/**
 * Created by yan on 2020/7/22.
 */
public class App {
    public static void main(String[] args) {



        /**
         *  lambda 表达式的构成
         *  1 声明 就是和lambda 表达式绑定的接口类型
         *  2 参数 包含在一对圆括号中(),和绑定的接口方法的参数个数和顺序一致
         *  3 操作符 ->
         *  4 执行代码块 包含在一对大括号中{} ,出现在操作符的右侧
         */

        // 没有参数没有返回值的 lambda 表达式

        Ilambda ilambdaVoid = () ->{
            System.out.println("ilambdaVoid 我是没有返回值没有参数的lambda");
        };
        ilambdaVoid.test();

        //如果只有一行代码可以省略大括号

        Ilambda ilambdaVoid2 = () -> System.out.println("我是没返回值和参数的");
        ilambdaVoid2.test();

        //带有参数但是没有返回值的 lambda 表达式
        Ilambda2 ilambda2 = (String user,int age) -> {
            System.out.println(user+age+"我是没有返回值有参数的");
        };
        ilambda2.test("张三",18);

        // 可以省略参数类型,由jvm指定
        Ilambda2 ilambda = (username,age) ->{
            System.out.println(username+age+"参数类型可以省略的");
        };
        ilambda.test("lisi",19);

        Ilambada3 ilambada3 = (x,y) -> {
            int z = x + y;
            return z;
        };
        System.out.println("有返回值的lambda"+ilambada3.test(1,2));

        //当只有一行表达式的时候可以省略大括号和return
        Ilambada3 ilambada31 = (x,y) -> x+y;
        System.out.println("有返回值的省略returnlambda"+ilambada31.test(1,20));

        /**
         * 1 lambda表达式,必须和接口绑定
         * 2 lambda表达式的参数,可以是0或者n个,参数类型不用指定,
         * 3 lambda表达式的返回值,如果只有一行代码,并且没有大括号不用写 return 关键字,如果有{} 或者 多行代码要用return
         */
    }

    // 没有参数没有返回值的 lambda 表达式
    interface Ilambda{
        void test();
    }

    //带有参数但是没有返回值的 lambda 表达式

    interface Ilambda2{
        void test(String name, int age);
    }

    //带有参数和返回值的
    interface Ilambada3{

        int test(int x, int y );
    }
}

方法的引用

是指如果某个方法签名和接口恰好一致,就可以直接传入方法引用。方法名可以不同,方法参数一致,返回类型相同。

使用Lambda表达式,我们就可以不必编写FunctionalInterface接口的实现类,从而简化代码:

Arrays.sort(array, (s1, s2) -> {
    return s1.compareTo(s2);
});

public class Main {
    public static void main(String[] args) {
        String[] array = new String[] { "Apple", "Orange", "Banana", "Lemon" };
        Arrays.sort(array, Main::cmp);
        System.out.println(String.join(", ", array));
    }

    static int cmp(String s1, String s2) {
        return s1.compareTo(s2);
    }
}

除了可以引用静态方法和实例方法,我们还可以引用构造方法

public class Main {
    public static void main(String[] args) {
        List<String> names = List.of("Bob", "Alice", "Tim");
        List<Person> persons = names.stream().map(Person::new).collect(Collectors.toList());
        System.out.println(persons);
    }
}

class Person {
    String name;
    public Person(String name) {
        this.name = name;
    }
    public String toString() {
        return "Person:" + this.name;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值