Java Lambda 基礎

前言

Lambda語法對我而言較像是coding風格上的改變,讓程式碼風格更加地簡潔,如果程式碼更加簡潔那就代表

  • 更容易被管理
  • 容易管理代表容易擴張與除錯
  • 容易擴張除錯也代表的迭代速度加快
  • 速度加快代表產品更容易修改去符合使用者需求
  • 產引更容易符合使用者需求代表公司賺大錢

我真心認為許多工程師常常覺得自己只是在寫Code,其實不然他們在幫助公司創造更多的機會養活更多的家庭與製造更多生產。

當然除了上述的優點之外,現在Java社群與官方也已經環繞著Lambda進行多種開發,這也代表使用Lambda可以讓工程師們減少重複的工作(而這些重複的工作Lambda提供的效能可能還比自己寫到好…汗顏)

內容中的原始碼可以參考我的GitHub! 點我!

甚麼是Lambda

先讓我們看一下使用Lambda前後的範例

無參數 使用執行續Print出字串

    private void withoutLambda() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hi! This function isn't using lambda");
            }
        }).start();
    }

    private void withLambda() {
        new Thread(() -> 
            System.out.println("Hi! This function is using lambda")
        ).start();
    }

有參數 將較長的字串往後移動

   private void hasParameter() {
        List<String> list = Arrays.asList("Hi", "my", "name", "is", "Charlie");
        list.sort(new Comparator<String>(){
            @Override
            public int compare(String s1, String s2) {
                return s1.length()-s2.length();
            }
        });
    }

    private void lambdaHasParameter() {
        List<String> list = Arrays.asList("Hi", "my", "name", "is", "Charlie");
        list.sort((s1, s2) -> {
                return s1.length()-s2.length();
            });
    }

可以看到使用Lambda後我們不再需要複寫匿名類別的方法,只需要使用()->{}就可以開始撰寫自己的邏輯

Lambda如何實踐的?

Java lambda主要的實踐是依賴擁有Annotation @FunctionalInterface的介面上,Java會掃出擁有此標記的介面並且理解這可以執行Lambda語法,範例如下

public class AnonymousExample {
    private void makeLambdaFunction(Example example) {
        example.exampleFunction();
    }
    
    public static void main(String[] args) {
        AnonymousExample example = new AnonymousExample();
        example.makeLambdaFunction(()->{
            System.out.println("Hi i make lambda function by myself");
        });
    }

    @FunctionalInterface
    public interface Example {
        void exampleFunction();
    }
}

結果

Hi i make lambda function by myself

結論

根據本文可以看到Lambda實踐可以減少在Java8版本以前的程式撰寫成本,而要時做Lambda也只需要在介面新增簡單的FunnctionalInterface

留言

這個網誌中的熱門文章

Java Lambda Map篇

(InterviewBit) System Design - Design Cache System

設計模式 - 享元模式 (Structural Patterns - Flyweight Design Pattern)