zoukankan      html  css  js  c++  java
  • lamda__从new Thread说起

    有这么个困惑,开启线程不都是继承Thread或重写runnable吗?为什么我是直接new的?这和new A(100)有什么区别?A(100)存的是变量啊为什么这里是'函数'?

    new Thread(()->{
                System.out.println(666);
            }).start();
    

    这里的本质是相当于new Thread(new Runnbale())
    事实上,对于Thread确实是new。里面这个函数则是等于new了个Runnable

    最原始写法

    //原始写法
    class MyRunnable implements Runnable{
    
        @Override
        public void run() {
            System.out.println(666);
        }
    }
    //然后调用是这样的
    new Thread(new MyRunnable()).start();
    

    匿名内部类

    但是上面的太麻烦 ,每次都要显示实现接口,单独创一个类就很累
    就赋予new新功能,让它至少封装在一步
    形式为 new A(){} 在{}里面重写方法

            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(666);
                }
            }).start();
    
    

    总结一下,简化流程大概是这样的,所以也叫“函数式编程”,纯粹的面向功能,直观形象

    进阶

    数组排序,倒序。

    Arrays.sort(new Integer[]{1,2,3,4,19,0},(a,b)-> b-a);
    

    很简洁,这里要实现的其实就一个Compartor比较器
    点开源码,就一个方法

    不熟的话可以从v1写起,大概就是这样

    注意的三个点:

    1. 不能使用int[],没法比较,要用对象
    2. 实现Comparator的时候要加泛型,不然默认是obj,obj直接不能直接-操作
    3. 其实Comparator中除了默认和静态方法,还有一个额外的equals方法。按理来说函数式接口只有一个方法,但由于equals是重写父类obj的所以不算

    总结

    三步走:自己实现接口 >> 匿名内部类 >> lamda
    可以看到lamda确实很方便,甚至高效(v1或者v2都需要泛型)

  • 相关阅读:
    如何使用jpegtran 压缩JPG图片
    JS获取后台返回的JSON数据
    VUE安装步骤1
    VUE安装步骤
    SVN使用教程总结
    WebStorm的下载与安装
    理解CSS3 transform中的Matrix(矩阵)
    http statusCode(状态码) 200、300、400、500序列详解
    JS如何获取屏幕、浏览器及网页高度宽度?
    html5使用local storage存储的数据在本地是以何种形式保存的
  • 原文地址:https://www.cnblogs.com/purexww/p/15265878.html
Copyright © 2011-2022 走看看