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);
posted @ 2020-08-01 10:23  ukyo--君君小时候  阅读(137)  评论(3编辑  收藏  举报