ラムダの怠惰なローディング技術

ラムダの怠惰なローディング技術

通常のコードスプライシングストリング

コード例

public class Demo01Logger {
    public static void show(int i,String message)
    {
        if (i==1)
        System.out.println(message);
    }

    public static void main(String[] args) {
        String message1="Hello";
        String message2="world";
        String message3="world";
        show(1,message1+message2+message3);
        show(2,message1+message2+message3);
    }
}

見つかった問題:

パフォーマンスの浪費の問題が見つかりました
.showメソッドを呼び出すと、渡される2番目のパラメーターはスプライスされた文字列です.show
メソッドに進む前に最初に文字列をスプライスします.show
メソッドでは、ログレベルが1でない
場合、スプライスは返されません。ひもの後、ひもはスプライシングで無駄になりました

ラムダ機能インターフェイスを使用して、文字列コードのスプライシングを実装します

機能的なインターフェイスを定義する

利点:

渡すパラメーターとしてラムダ式を使用し、パラメーターをshowメソッドに渡す
だけです。条件が満たされ、ログレベルがレベル1
の場合にのみ、インターフェイスshowのメソッドが呼び出され、
文字列がスプライスされ
ます。レベルが1でない場合、
インターフェイスに表示されるメソッドは実行されない
ため、スプライシングコードは実行されない
ため、パフォーマンスの無駄はありません。

@FunctionalInterface
public interface Demo02Logger {
    String show();
}

要件を満たすクラスを定義する

import java.util.logging.Logger;

public class Demo02LoggerLambda {
    public  static  void show(int i, Demo02Logger logger)
    {
        if (i==1)
            System.out.println(logger.show());
    }
    public static void main(String[] args) {
        String message1="Hello";
        String message2="world";
        String message3="world";
        show(1,()->{return message1+message2+message3;});

        show(2,()->{
            System.out.println("不满足条件不执行!!!");
            return message1+message2+message3;});

    }
}

おすすめ

転載: blog.csdn.net/tangshuai96/article/details/104265606