Как сделать ваш код более элегантным? Лямбда-выражения помогут вам взлететь! |Практика Java-разработки

задняя часть
Как сделать ваш код более элегантным? Лямбда-выражения помогут вам взлететь! |Практика Java-разработки

Это 9-й день моего участия в Gengwen Challenge.Подробности мероприятия смотрите:Обновить вызов

Эта статья участвует в "Java Theme Month - Java Development Practice", подробнее см.Ссылка на мероприятие


Статьи по Теме

Многопоточность Java:Многопоточность Java


предисловие

лямбда-выражения поддерживают только функциональные интерфейсы.

  • Лямбда-выражение — это новая функция JDK8, которая может заменить большинство анонимных внутренних классов и написать более элегантный код Java, особенно при обходе коллекции и других операциях с коллекциями, что может значительно оптимизировать структуру кода.
  • Почему вы хотите внезапно вставить изучение лямда-выражений, потому что это очень убедительно~ Код написан больше как большой парень.
1. Функциональный интерфейс
  • Что такое функциональный интерфейс?

    • любой интерфейс,есть и толькоабстрактный метод, то это функциональный интерфейс.
  • Типовой функциональный интерфейс

public interface mainInterface {
    void funMethod();
}
  • Для функционального интерфейса мы можем использовать лямбда-выражение для создания объекта его реализации.
Во-вторых, пять методов реализации интерфейса
  • ① Нормальная реализация класса

Случай кода:

/**
 * 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);
            }
        };
  • ⑤ реализация лямбда-выражения
//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);
    }
}

  • Результат выполнения следующий:

在这里插入图片描述

2. лямбда-выражения
  • Метод реализации:

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);
}

Результат выполнения следующий:在这里插入图片描述

3. Упрощение лямбда-выражений:
  • Упрощенный способ:
		 //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));

Результат выполнения следующий:在这里插入图片描述

  • Суммировать
    • Упростите тип параметра, вы не можете написать тип параметра, но вы не должны писать все параметры
    • Упростите скобки параметра, если параметр только один, скобки параметра можно опустить.
    • Упростите фигурные скобки тела метода, если на панели методов есть только один оператор, вы можете выиграть фигурные скобки тела метода.
    • Если тело метода имеет только один оператор, и это оператор возврата, вы можете опустить фигурные скобки тела метода.

Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~

Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах