zoukankan      html  css  js  c++  java
  • Lambda表达式和匿名内部类

    例1:无参函数的简写

    如果需要新建一个线程,一种常见的写法是这样:

    // JDK7 匿名内部类写法
    new Thread(new Runnable(){// 接口名
        @Override
        public void run(){// 方法名
            System.out.println("Thread run()");
        }
    }).start();

    上述代码给Tread类传递了一个匿名的Runnable对象,重载Runnable接口的run()方法来实现相应逻辑。这是JDK7以及之前的常见写法。匿名内部类省去了为类起名字的烦恼,但还是不够简化,在Java 8中可以简化为如下形式:

    // JDK8 Lambda表达式写法
    new Thread(
            () -> System.out.println("Thread run()")// 省略接口名和方法名
    ).start();

    上述代码跟匿名内部类的作用是一样的,但比匿名内部类更进一步。这里连接口名和函数名都一同省掉了,写起来更加神清气爽。如果函数体有多行,可以用大括号括起来,就像这样:

    // JDK8 Lambda表达式代码块写法
    new Thread(
            () -> {
                System.out.print("Hello");
                System.out.println(" Hoolee");
            }
    ).start();
    例2:带参函数的简写

    如果要给一个字符串列表通过自定义比较器,按照字符串长度进行排序,Java 7的书写形式如下:

    // JDK7 匿名内部类写法
    List<String> list = Arrays.asList("I", "love", "you", "too");
    Collections.sort(list, new Comparator<String>(){// 接口名
        @Override
        public int compare(String s1, String s2){// 方法名
            if(s1 == null)
                return -1;
            if(s2 == null)
                return 1;
            return s1.length()-s2.length();
        }
    });

    上述代码通过内部类重载了Comparator接口的compare()方法,实现比较逻辑。采用Lambda表达式可简写如下:

    // JDK8 Lambda表达式写法
    List<String> list = Arrays.asList("I", "love", "you", "too");
    Collections.sort(list, (s1, s2) ->{// 省略参数表的类型
        if(s1 == null)
            return -1;
        if(s2 == null)
            return 1;
        return s1.length()-s2.length();
    });

    上述代码跟匿名内部类的作用是一样的。除了省略了接口名和方法名,代码中把参数表的类型也省略了。这得益于javac的类型推断机制,编译器能够根据上下文信息推断出参数的类型,当然也有推断失败的时候,这时就需要手动指明参数类型了。注意,Java是强类型语言,每个变量和对象都必需有明确的类型。

  • 相关阅读:
    浅析 c# Queue
    c# Stack操作类
    delegate,event, lambda,Func,Action以及Predicate
    推翻MMSOA与WEBService,使用MEMBRANE soap Monitor检查 wsdl文件。
    JS打印表格(HTML定义格式)
    坑爹的META 刷新页面 框架页面中TOP页面提示刷新 meta元素设置而不基于 JS 的坑爹写法。
    Silverlight载入动画(简易)
    WPF先开了再说
    跨域WEB Service 调用(摘自ASP.NET高级编程第三版)
    安装程序找不到Office.zhcn\OfficeMUI问题
  • 原文地址:https://www.cnblogs.com/lcx20190724xxz/p/11237135.html
Copyright © 2011-2022 走看看