首页 > 其他 > 详细

lamda表达式

时间:2019-08-19 16:31:14      阅读:127      评论:0      收藏:0      [点我收藏+]
/**
 * 符合lambda表达式的接口也叫函数式接口:
 * 除了默认方法和Object类的方法外,只有一个抽象方法的接口才能符合lambda表达式的要求
 * 可以使用@FunctionalInterface来校验,如果没报错就是符合要求的
 *
 *
 */
@FunctionalInterface
public interface Animal {

    default String getName(){
        return "animal";
    }

    void eat();

}
//无参有返回
public interface Person {
    String getName();
}
//有参无返回
public interface Sckool {

    void learn(String name);
}
//有参有返回
public interface Student {
    String conCat(String str,String str2);
}
package lambda;

public class testLambda {
    public static void main(String[] args) {
        //要调用一个接口的方法,要么定义一个类来实现该接口,要么使用匿名内部类:
        //下面使用匿名内部类:

        eat(new Animal() {
            @Override
            public void eat() {
                System.out.println("动物吃东西");
            }
        });
        /**
         * 如果匿名内部类只有一个方法,可以使用lambda表达式替换:
         *  总共分下面4种情况:
         *          无参无返回格式:
         *              单条语句时()->xxx ;多条语句时()->{xx;aa;}
         *          无参有返回:
         *              单条语句时()->xxx;多条语句时()->{xx; return aa;}
         *          有参无返回:
         *              单条语句单个参数时:a->xxx;多条语句单个参数时a->{xx;cc;}
         *              单条语句多个参数时:(a,b)->xxx;多条语句多个参数时(a,b)->{xx;cc;}
         *
         *          有参有返回:
         *              单条语句单个参数时:a->xxx;多条语句单个参数时a->{xx;return cc;}
         *              单条语句多个参数时:(a,b)->xxx;多条语句多个参数时(a,b)->{xx; return cc;}
         */

        //-------- 无参无返回格式:
        //单条语句时()->xxx
        eat(()-> System.out.println("aaa"));

        //多条语句时()->{xx;aa;}
        eat(()->{
            System.out.println("dd");
            System.out.println("cc");
        });

        //---------无参数有返回格式:
        // 单条语句时()->xxx;
        String name=getName(()->"kk");

        //多条语句时()->{xx; return aa;}
        getName(()->{
            System.out.println("dd");
            return "cc";
        });

        //--------有参数无返回时

        //单条语句单个参数时
        learn(a-> System.out.println(a));

        //多条语句单个参数时a->{xx;cc;}
        learn(a->{
            System.out.println("lll");
            System.out.println("cc");
        });

        //单条语句多个参数时
        // learn((a,b)-> System.out.println(a+b));

        //多条语句多个参数时(a,b)->{xx;cc;}
        /**
         *
         *  learn((a,b)-> {
            System.out.println("lll");
            System.out.println("cc");
            });

         *
         */

        //---------有参数有返回

        //单条语句单个参数时:a->xxx;
        // learn(a-> "dd");

        //多条语句单个参数时a->{xx;return cc;}
        /**
         *   learn(a->{
                System.out.println("lll");
                 return "ss";
                });
         *
         *
         */

        //单条语句多个参数时:(a,b)->xxx
        String subject=concat((a,b)->a+b);

        //多条语句多个参数时(a,b)->{xx; return cc;}
        String subject2=concat((a,b)->{
            System.out.println("ddd");
            return a+b;
        });

        /**
         *
         * 我们使用lambda表达式时候,都是要实现一个方法,如果你要实现的方法刚好其他类有,那么就可以引用其他类的方法过来当做该匿名内部类的实现
         * 所以方法的引用分为:
         * 静态方法的引用,如System.out:println
         * 非静态方法的引用:如 new Dog()::eat;
         * 参数类型方法的引用,例如一个要实现的方法参数是String a,String b ,期望的结果是a+b,那么可以引用String::concat方法
         *
         *
         */

        learn(System.out::print); //刚好learn的内部类要实现的方法跟System.out的方法长得一样,所以可以引用该方法当做自己的实现方法
        eat(new testLambda()::haveMeal);//非静态方法的引用
        String str=concat(String::concat);//参数
        System.out.println(str);



    }

    public static void eat(Animal animal){
        animal.eat();
    }
    public static String getName(Person person){
        return person.getName();
    }
    public static void learn(Sckool sckool){
        sckool.learn("java");
    }
    public static String concat(Student student){
        return student.conCat("java","php");
    }

    public void haveMeal(){
        System.out.println("吃饭");
    }
}

 

lamda表达式

原文:https://www.cnblogs.com/yangxiaohui227/p/11377436.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!