zoukankan      html  css  js  c++  java
  • Java lambda表达式的进化论

    前情提示:

    lambda表达式是JDK1.8的新特性

    1. 进化的初级阶段之静态内部类

    public class LambdaDemo {
        //静态内部类
        static class ListenMusic implements Runnable {
            @Override
            public void run() {
                for (int i = 5; i > 0; i--) {
                    System.out.println("---静态内部类**一边听歌---" + i);
                }
            }
        }
    
        public static void main(String[] args) {
            new Thread(new ListenMusic()).start();
        }
    }

    结果:

    ---静态内部类**一边听歌---5
    ---静态内部类**一边听歌---4
    ---静态内部类**一边听歌---3
    ---静态内部类**一边听歌---2
    ---静态内部类**一边听歌---1

    2.进化的第二阶段之局部内部类

    public class LambdaDemo {
        //局部内部类,方法里面的类就是局部内部类
        //这里,我们把局部内不能放在了类方法里面
    
        public static void main(String[] args) {
            class ListenMusic implements Runnable {
                @Override
                public void run() {
                    for (int i = 5; i > 0; i--) {
                        System.out.println("---静态内部类**一边听歌---" + i);
                    }
                }
            }
            new Thread(new ListenMusic()).start();
        }
    }

    结果:

    ---静态内部类**一边听歌---5
    ---静态内部类**一边听歌---4
    ---静态内部类**一边听歌---3
    ---静态内部类**一边听歌---2
    ---静态内部类**一边听歌---1

    3.进化的第三阶段之匿名内部类

    public class LambdaDemo {
        //匿名内部类必须要跟在new 类名()或者new 接口名()后面
        //这里,我们把匿名内部类放在了类方法里面
    
        public static void main(String[] args) {
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 5; i > 0; i--) {
                        System.out.println("---匿名内部类**一边听歌---" + i);
                    }
                }
            }).start();
        }
    }

    结果:

    ---匿名内部类**一边听歌---5
    ---匿名内部类**一边听歌---4
    ---匿名内部类**一边听歌---3
    ---匿名内部类**一边听歌---2
    ---匿名内部类**一边听歌---1

    4.进化的第四阶段之lambda表达式诞生

    public class LambdaDemo {
        //lambda表达式
        //这里,我们把lambda放在了main()方法里面
    
        public static void main(String[] args) {
    
            new Thread(() -> {
                for (int i = 5; i > 0; i--) {
                    System.out.println("---lambda**一边听歌---" + i);
                }
            }
            ).start();
        }
    }

    结果:

    ---lambda**一边听歌---5
    ---lambda**一边听歌---4
    ---lambda**一边听歌---3
    ---lambda**一边听歌---2
    ---lambda**一边听歌---1

    再来看一个lambda表达式的例子

    public class LambdaDemo {
    
        public static void main(String[] args) {
    
            Music m = () -> {
                System.out.println("---我爱lamba音乐---");
            };
            m.listen();
        }
    }
    
    interface Music {
        void listen();
    }

    结果:

    ---我爱lamba音乐---

    抽象类不能用在lambda表达式,因为抽象类不能实例化。

    lambda表达式的()里面可以带参数

    lambda表达式与函数时接口有关

  • 相关阅读:
    两个页面相同js方法兼容
    两个页面js方法兼容
    jQuery Chosen 使用
    我写的一个抓取基金净值的工具
    自己做的一个固定大小对象内存池,效率大概为原始的new/delete的2倍
    用libevent实现的echo服务器及telnet客户端
    共享一个防止脚本重复启动的shell脚本
    神煞排盘软件
    一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)
    写了一个时间处理的类,能将人类时间转换成距离公元零年一月一日秒数(时间戳),同时支持时间戳转换成日期时间
  • 原文地址:https://www.cnblogs.com/majestyking/p/12443958.html
Copyright © 2011-2022 走看看