zoukankan      html  css  js  c++  java
  • lambda VS 匿名类 节选1

    • lambda是函数式编程.很多语言中,函数(方法)是一等公民,无需依附于任何其它元素即可存在,并可以作为参数和返回值.而Java中只有类是一等公民,方法必须依附于某个类.
      Java现在也支持lambda了
    • 看例程: 两种方式遍历List,遍历Map
    • 看例程: lambda相当于是Java通过一顿后台操作帮我们生成了一个类来实现接口,并调用我们提供的方法
    • 看例程: 使用stream和collector,理解lambda的美
    • 看例程: lambda可以有返回值和异常

    两个静态方法

    
        public static List<String> addElementsToList(List<String> list) {
            for (int i = 0; i < 22; i++) {
                list.add("str" + i);
            }
            return list;
        }
    
    
        private static void processString(String str) {
            System.out.println(str);
        }
    

    普通输出集合方式

            List<String> myList = addElementsToList(new ArrayList<>());
            String outside = "outside string";
    
            for (String s : myList) {
                processString(outside + s);
            }
    

    匿名内部类版本

            // TODO 匿名内部类版
            myList.forEach(
                    new Consumer<String>() {
                        @Override
                        public void accept(String s) {
                            processString(outside + s);
                        }
                    }
            );
    

    lambda完整版

            // TODO lambda的表达式必须能够符合接口中定义的抽象方法,从参数,到返回值,到异常,都必须匹配
    
            // TODO lambda 完整版 (参数) -> {代码块}
            // TODO lambda可以有返回值,使用return语句就可以,当然我们这个接口没有,我们的lambda表达式也不能有
            // TODO lambda可以使用外部数据,怎么看都和匿名内部类是一样的
            myList.forEach(
                    (s) -> {
                        processString(outside + s);
                    }
            );
    

    lambda简化版,去除了参数后大括号

            // TODO lambda 单参数,代码单行 简化版,
            myList.forEach(s -> processString(outside + s));
    

    lambda终极版,如果不使用外部变量

            // TODO lambda 如果不使用外部变量,还有方法引用终极简化版
            myList.forEach(IterateListLambdaAppMain::processString);
    

    lambda终极版,不是静态方法的话

    
            // TODO lambda 方法引用终极简化版:不是静态方法,用引用也可以
            IterateListLambdaAppMain inst = new IterateListLambdaAppMain();
            myList.forEach(inst::processStringInst);
    
            private void processStringInst(String str) {
                  System.out.println(str);
            }
    
            // TODO lambda也允许指定一个参数类型里的一个方法作为方法的引用
            myList.forEach(String::toUpperCase);
    
  • 相关阅读:
    Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
    VS的快捷键F12改成和ECLIPSE一样用ctrl+点击下载线
    到底要不要拆分函数
    “DllRegisterServer的调用失败”问题解决办法(转)
    select into的缺点
    win8 下脚本安装IIS
    快速打开IIS的方法
    windows下硬盘的逻辑结构
    sql server 2005/2008R2 报“红叉”错,即“不允许所请求的注册表访问权”的错误
    rundll32.exe的相关使用语句
  • 原文地址:https://www.cnblogs.com/ukzq/p/13413579.html
Copyright © 2011-2022 走看看