java中的lambda表達式


java中的lambda表達式

java的lambda表達式是調用類的快捷書寫方法。lambda表達式可以帶參數也可以不帶參數,接下來分為無參數的情況和有參數的情況來理解lambda表達式。

無參數

外部類

以下代碼通過構建一個外部類來定義接口功能:

package com.cxf.multithread.lambda;

public class TestForLamda {
    public static void main(String[] args) {
        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo();
    }
}

interface DoThing{
    void justDo();
}

class JustDoIt implements DoThing{
    @Override
    public void justDo() {
        System.out.println("i am doing1");
    }
}

輸出結果:

i am doing1

靜態內部類

以下代碼通過構建一個靜態內部類來定義接口功能:

package com.cxf.multithread.lambda;

public class TestForLamda {
    static class JustDoIt implements DoThing{
        @Override
        public void justDo() {
            System.out.println("i am doing2");
        }
    }

    public static void main(String[] args) {
        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo();
    }
}

interface DoThing{
    void justDo();
}


輸出結果:

i am doing2

局部內部類

以下代碼通過構建一個局部內部類來定義接口功能:

package com.cxf.multithread.lambda;

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

        class JustDoIt implements DoThing{
            @Override
            public void justDo() {
                System.out.println("i am doing3");
            }
        }

        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo();
    }
}

interface DoThing{
    void justDo();
}


輸出結果:

i am doing3

匿名內部類

以下代碼通過構建一個匿名內部類來定義接口功能:

package com.cxf.multithread.lambda;

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

        DoThing justDoIt = new DoThing() {
            @Override
            public void justDo() {
                System.out.println("i am doing4");
            }
        };

        justDoIt.justDo();
    }
}

interface DoThing{
    void justDo();
}


輸出結果:

i am doing4

lambda表達式

以下代碼通過構建一個外部類來定義接口功能:

package com.cxf.multithread.lambda;

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

        DoThing justDoit = () -> {
            System.out.println("I am doing 5");
        };

        justDoit.justDo();
    }
}

interface DoThing{
    void justDo();
}


輸出結果:

I am doing 5

lambda表達式是從外部類經過上述介紹順序簡化而來,它簡潔地重寫了接口方法並實現了接口。

使用lambda表達式的條件是,已經定義了一個接口,並且這個接口只有一個void方法。

有參數

接下來是接口void方法有參數的情況。

外部類

package com.cxf.multithread.lambda;

public class TestForLamda {
    public static void main(String[] args) {
        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo(1);
    }
}

interface DoThing{
    void justDo(int a);
}

class JustDoIt implements DoThing{
    @Override
    public void justDo(int a) {
        System.out.println("i am doing"+a);
    }
}

輸出結果:

i am doing1

靜態內部類

package com.cxf.multithread.lambda;

public class TestForLamda {
    static class JustDoIt implements DoThing{
        @Override
        public void justDo(int a) {
            System.out.println("i am doing"+a);
        }
    }

    public static void main(String[] args) {
        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo(2);
    }
}

interface DoThing{
    void justDo(int a);
}


輸出結果:

i am doing2

局部內部類

package com.cxf.multithread.lambda;

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

        class JustDoIt implements DoThing{
            @Override
            public void justDo(int a) {
                System.out.println("i am doing"+a);
            }
        }

        JustDoIt justDoIt = new JustDoIt();
        justDoIt.justDo(3);
    }
}

interface DoThing{
    void justDo(int a);
}


輸出結果:

i am doing3

匿名內部類

package com.cxf.multithread.lambda;

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

        DoThing justDoIt = new DoThing() {
            @Override
            public void justDo(int a) {
                System.out.println("i am doing"+a);
            }
        };

        justDoIt.justDo(4);
    }
}

interface DoThing{
    void justDo(int a);
}


輸出結果:

i am doing4

lambda表達式

package com.cxf.multithread.lambda;

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

        DoThing justDoit = (int a) -> {
            System.out.println("I am doing"+a);
        };

        justDoit.justDo(5);
    }
}

interface DoThing{
    void justDo(int a);
}


輸出結果:

I am doing5

有參數的lambda表達式還可以進一步簡化:

package com.cxf.multithread.lambda;

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

        DoThing justDoit = a ->
            System.out.println("I am doing"+a);

        justDoit.justDo(5);
    }
}

interface DoThing{
    void justDo(int a);
}


去掉了參數類型、括號、花括號,結果依舊相同。

重寫方法體中如有多行,仍需加上花括號。

多個參數時也可以去掉參數類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM