• 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);
    
  • 相关阅读:
    SQL Sever语言 存储过程及触发器
    计蒜客 挑战难题 移除数组中的重复元素
    projecteuler Sum square difference
    码农谷 求前N项之和
    projecteuler Smallest multiple
    计蒜客 挑战难题 寻找插入位置
    Largest palindrome product
    计蒜客 挑战难题 元素移除
    码农谷 球从M米高度自由下落第N次落地时反弹的高度
    挑战难题 奇怪的国家
  • 原文地址:https://www.cnblogs.com/ukzq/p/13413579.html
Copyright © 2020-2023  润新知