ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lambda VS 匿名类 节选1

2021-07-08 14:56:38  阅读:201  来源: 互联网

标签:myList String 节选 outside VS forEach TODO lambda


  • 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);
   

标签:myList,String,节选,outside,VS,forEach,TODO,lambda
来源: https://blog.51cto.com/u_11956468/3014346

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有