IT干货网

java中的lambda表达式

wyy 2022年03月12日 编程设计 148 0

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

去掉了参数类型、括号、花括号,结果依旧相同。

重写方法体中如有多行,仍需加上花括号。

多个参数时也可以去掉参数类型。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

静态代理