• Java8 新增的Lambda表达式


    引入

    使用匿名内部类(匿名内部类可参考:Java中的匿名内部类

    interface Command
    {
        void process(int[] target);
    }
    class ProcessArray
    {
        public  void process(int [] target, Command cmd)
        {
            cmd.process(target);
        }
    }
    public class CommandTest
    {
        public static void main(String[] args)
        {
            ProcessArray pa = new ProcessArray();
            int[] arr = {1,2,3,4};
            //使用匿名内部类
            pa.process(arr, new Command(){
                    public void process(int[] arr)
                    {
                        int sum =0;
                        for(int k : arr)
                            sum += k;
                        System.out.println(sum);
                    }
                }
            );
        }
    }
    View Code

    使用Lambda表达式,可以简化匿名内部类。(部分可以用Lambda表达式代替)

    interface Command
    {
        void process(int[] target);
    }
    class ProcessArray
    {
        public  void process(int [] target, Command cmd)
        {
            cmd.process(target);
        }
    }
    
    //Java8 新增了Lambda表达式,Lambda表达式完全可用于简化匿名内部类对象
    public class CommandTest
    {
        public static void main(String[] args)
        {
            ProcessArray pa = new ProcessArray();
            int[] arr = {1,2,3,4};
            //使用Lambda表达式
            pa.process(arr, (int[] arr1)->    //不能重复arr,错误: 已在方法 main(String[])中定义了变量 arr
                    {
                        int sum =0;
                        for(int k : arr1)
                            sum += k;
                        System.out.println(sum);
                    }
            );
        }
    }
    View Code

    Lambda的语法

    1. 参数列表。参数列表允许省略形参类型;若只有一个形参,甚至可省略参数列表的圆括号
    2. 箭头 ->
    3. 代码块。若只有一句,可省略{};

    Lambda表达式是有类型的,称为“目标类型(target type)”,它必须是函数式接口(functional interface)。
    函数式接口是只包含一个抽象方法的接口。函数式接口可以包含多个默认方法、类方法,但只能有一个抽象方法。
    Java8 提供了 @FunctionalInterface 注解,用于编译器检查接口是函数式接口,放在接口定义的前面。

        public static void main(String[] args)
        {
            //Lambda表达式的返回就是函数式接口的对象
            // Runnable 是Java中提供的一个接口,只有一个匿名方法 void run()
            Runnable r = () -> {
                int sum = 0;
                for(int i=0; i<=100; ++i)
                    sum += i;
                System.out.println(sum);
            };
            r.run();
        }

    *******************

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    离线安装SharePoint 2010必备组件下载链接
    skrollr——兼容性超强的视差滚动js插件
    Heroku实战入门(二)简单实战
    xp中安装sybase15.7遇到的三个问题
    思科三层交换机开启路由模式的方法
    Heroku实战入门(一)初识heroku
    Heroku实战入门(三)常用命令
    Splinter——开源的轻量级前端测试工具
    Request.ServerVariables 转
    Page.MaintainScrollPositionOnPostBack 属性
  • 原文地址:https://www.cnblogs.com/htj10/p/12366065.html
Copyright © 2020-2023  润新知