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);
    
  • 相关阅读:
    解决Uploadify 3.2上传控件加载导致的GET 404 Not Found问题
    Intellij idea的Dependencies波浪线
    Web.xml配置详解之context-param
    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path(Myeclipse添加Server Library)
    html5 video mp4播放不了问题
    切片优化小拾
    解决video标签的兼容性
    css module.css demo
    Gnet 响应式官网开发总结
    前端小总结
  • 原文地址:https://www.cnblogs.com/ukzq/p/13413579.html
Copyright © 2011-2022 走看看