<返回更多

如何让你的代码写起来更加优雅?Lamda表达式助你起飞

2021-06-11    Java小梁同学
加入收藏

前言

lamda表达式只支持函数式接口。

一、函数式接口

什么是函数式接口?

任何一个接口,有且只有 一个抽象方法,那么它就是函数式接口。

典型的函数式接口


public interface mainInterface {
    void funMethod();
}

对于函数式接口,我们可以用lamda表达式来创建他的实现对象。

二、接口的五种实现方式

①正常类实现

代码案例:

/**
 * 1.正常接口实现类
 */
class FunInterImpl implements FunInter{
    //重写该方法
    @Override
    public void method(String name) {
        System.out.println("我是实现类中的重写方法:"+name);
    }
}

②静态内部类实现

//2、静态内部类实现
    static class FunInterImpl implements FunInter{
        @Override
        public void method(String name) {
            System.out.println("我是实现类中的重写方法:"+name);
        }
    }

③局部内部类实现

//3.局部内部类
        class FunInterImpl2 implements FunInter{
            @Override
            public void method(String name) {
                System.out.println("我是实现类中的重写方法:"+name);
            }
        }

④匿名内部类实现

//4.匿名内部类,要一分号;结尾
        FunInter funInter2 = new FunInter() {
            @Override
            public void method(String name) {
                System.out.println("我是实现类中的重写方法:"+name);
            }
        };

⑤lamda表达式实现

//5.lamda表达式实现
        FunInter funInter3 = (String name) ->{
            System.out.println("我是实现类中的重写方法:"+name);
        };

整体代码:

public class NoReturnMultiParam {
    public static void main(String[] args) {
        //1.正常实现接口的方式
        FunInterImpl funInter = new FunInterImpl();
        funInter.method("1、实现类");
        System.out.println("***************************************");
        //2、静态内部类实现
        FunInterImpl funInter1 = new FunInterImpl();
        funInter.method("2、静态内部类");
        System.out.println("***************************************");
        //3.局部内部类
        class FunInterImpl2 implements FunInter{
            @Override
            public void method(String name) {
                System.out.println("我是实现类中的重写方法:"+name);
            }
        }
        FunInterImpl2 funInterImpl2 = new FunInterImpl2();
        funInterImpl2.method("3、局部内部类");
        System.out.println("***************************************");
        //4.匿名内部类,要一分号;结尾
        FunInter funInter2 = new FunInter() {
            @Override
            public void method(String name) {
                System.out.println("我是实现类中的重写方法:"+name);
            }
        };
        funInter2.method("4、匿名内部类");
        System.out.println("***************************************");
        //5.lamda表达式实现
        FunInter funInter3 = (String name) ->{
            System.out.println("我是实现类中的重写方法:"+name);
        };
        funInter3.method("5.lamda表达式实现");
    }

    //2、静态内部类实现
    static class FunInterImpl implements FunInter{
        @Override
        public void method(String name) {
            System.out.println("我是实现类中的重写方法:"+name);
        }
    }
}

/**
 * 这个注解是用来标注函数式接口的
 * 1.必须注解在接口上
 * 2.被注解的接口有且只有一个抽象方法
 * 3.被注解的接口可以有默认方法/静态方法,或者重写Object的方法
 */
@FunctionalInterface
interface FunInter{
    void method(String name);
}

/**
 * 1.正常接口实现类
 */
class FunInterImpl implements FunInter{

    //重写该方法
    @Override
    public void method(String name) {
        System.out.println("我是实现类中的重写方法:"+name);
    }
}

执行结果如下:

如何让你的代码写起来更加优雅?Lamda表达式助你起飞

 

三、lamda表达式

实现方式:

public class lamdaTest01 {
    public static void main(String[] args) {

        /**
         * 多参数无返回
         */
        NoReturnMultiParam1 n1 = (int a,int b) ->{
            System.out.println("多参数无返回:"+a+b);
        };
        n1.method(1,2);

        /**
         * 无参无返回值
         */
        NoReturnNoParam n2 = ()->{
            System.out.println("无参无返回值");
        } ;
        n2.method();

        /**
         * 一个参数无返回
         */
        NoReturnOneParam n3 = (int a) -> {
            System.out.println("一个参数无返回" + a);
        };
        n3.method(11);

        /**
         * 多个参数有返回值
         */
        ReturnMultiParam n4 = (int a,int b)->{
            System.out.println("多个参数有返回值" + a);
            return 1;
        };
        System.out.print("****"+n4.method(1, 3));

        /**
         * 无参有返回
         */
         ReturnNoParam n5 = ()->{
             System.out.println("无参有返回");
             return 1;
         };
        System.out.print("***"+n5.method());

        /**
         * 一个参数有返回值
         */
        ReturnOneParam n6 = (int a) ->{
            System.out.println("一个参数有返回值"+a);
            return a;
        };
        System.out.print("***"+n6.method(1));
    }
}

/**多参数无返回*/
@FunctionalInterface
interface NoReturnMultiParam1 {
    void method(int a, int b);
}

/**无参无返回值*/
@FunctionalInterface
interface NoReturnNoParam {
    void method();
}

/**一个参数无返回*/
@FunctionalInterface
interface NoReturnOneParam {
    void method(int a);
}

/**多个参数有返回值*/
@FunctionalInterface
interface ReturnMultiParam {
    int method(int a, int b);
}

/*** 无参有返回*/
@FunctionalInterface
interface ReturnNoParam {
    int method();
}

/**一个参数有返回值*/
@FunctionalInterface
interface ReturnOneParam {
    int method(int a);
}

执行结果如下:

如何让你的代码写起来更加优雅?Lamda表达式助你起飞

 

四、lamda表达式的简化:

简化的方式

		 //1.简化参数类型,可以不写参数类型,但是必须所有参数都不写
        NoReturnMultiParam1 lamdba1 = (a, b) -> {
            System.out.println("简化参数类型");
        };
        lamdba1.method(1, 2);

        //2.简化参数小括号,如果只有一个参数则可以省略参数小括号
        NoReturnOneParam lambda2 = a -> {
            System.out.println("简化参数小括号");
        };
        lambda2.method(1);

        //3.简化方法体大括号,如果方法条只有一条语句,则可以胜率方法体大括号
        NoReturnNoParam lambda3 = () -> System.out.println("简化方法体大括号");
        lambda3.method();

        //4.如果方法体只有一条语句,并且是 return 语句,则可以省略方法体大括号
        ReturnOneParam lambda4 = a -> a+3;
        System.out.println(lambda4.method(5));

        ReturnMultiParam lambda5 = (a, b) -> a+b;
        System.out.println(lambda5.method(1, 1));

执行结果如下:

如何让你的代码写起来更加优雅?Lamda表达式助你起飞

 

总结

写作不易,请点赞、关注、评论给博主一个鼓励吧~

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>