精华内容
下载资源
问答
  • Java匿名函数Lambda

    千次阅读 2019-01-24 10:47:07
    匿名内部类由于没有名字,创建格式如下: 父类名|接口名 对象名 = new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 匿名内部类必须要继承一个父类或者实现一个接口,当然也仅能只继承...

    匿名内部类由于没有名字,创建格式如下:

       父类名|接口名 对象名 = new 父类构造器(参数列表)|实现接口()  
            {  
             //匿名内部类的类体部分  
            }
    

    匿名内部类必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。当然这个引用是隐式的。
    这里重点阐述Lambda函数,学习其对实现的接口的方法的重写原理和过程。ps:lambda函数不能应用于类。

    下面有两个示例,希望对大家的理解有所帮助。

    示例1

    public class LambdaDemo {
    	public static void main(String[] args) {
    		
    		// 接口中只定义了1个抽象方法,可以利用Lambda表达式
    			// 来重写这唯一的一个抽象方法
    // 方式一
    /*		Cacl c = new Cacl() {
    
    		@Override
    		public double add(double i, double j) {
    			return i + j;
    		}	
    	}; */
    		
       //  方式2
           // 表示重写Cacl中唯一的一个抽象方法add
            // Lambda表达式只能作用在函数式接口上
    /*		Cacl c = (double a, double b) -> {
            		return a + b;
           	}; // 这里必须加分号,结尾
          	// 方法体只有一句,可以省略{}和return不写
           Cacl c = (double i,double j) -> i + j;  */
    		
    		
    		
     //   方式3		
        // 重写的是Cacl接口中的方法add
        // add方法的参数列表的类型是已知的
        // 可以省略参数类型不写
       	Cacl c = (x, y) -> x + y;  // 可读性很差,看不到重写的是哪个方法
       // 但是符合函数式编程方式,大数据方向常用的方式
    		
    		System.out.println(c.add(5.6, 9.9));
    	}
    }
    
    interface Cacl{
    	public double add(double i, double j);
    }
    

    小结:使用labmda函数重写方法的前提是实现的接口中有且仅有一个需要重写的抽象方法

    示例2

    public class LambdaDemo2 {
    	public static void main(String[] args) {
    		//方法体只有一句
    		// 这一句方法体直接操作参数
    		// 这一句方法体是调用了已有类Math中的静态方法sqrt
    //		Calculator c = (d) -> Math.sqrt(d);
    	
    	// 参数列表可以省略
    	Calculator c = Math::sqrt;
    	System.out.println(c.sqrt(9));
    }
    }
    
    interface Calculator{
    	double sqrt(double d);
    }
    

    小结:lambda函数符合函数式编程需求,但是其代码可读性很差,在实际开发中,可能看不到其具体实现的什么方法。

    展开全文
  • 一般来说匿名函数与匿名类用于回调,因为你可能并不知道回调函数或方法的具体实现,并且可能需要根据实际情况进行改变,并且匿名函数不需要使用具体的对象,也减少了开销下面看看PHP的匿名函数应用实现 interface ...

    一般来说匿名函数与匿名类用于回调,因为你可能并不知道回调函数或方法的具体实现,并且可能需要根据实际情况进行改变,并且匿名函数不需要使用具体的对象,也减少了开销

    下面看看PHP的匿名函数应用实现

    <?php
       interface Comparator {
           function compare($i, $j);
       }
    
       function getResult($i, $j, $comparator) {
           echo $comparator($i, $j);
       }
    
       $comparator1 = function($i, $j) {
           if($i > $j) {
               return 1;
           } else if($i < $j) {
               return -1;
           } else {
               return 0;
           }
       };
    
       $comparator2 = function($i, $j) {
           $ilen = strlen($i);
           $jlen = strlen($j);
    
           if($ilen > $jlen) {
               return 1;
           } else if($ilen < $jlen) {
               return -1;
           } else {
               return 0;
           }
       };
    
       getResult(1, 2, $comparator1);
       getResult(1, 2, $comparator2);
    
       #或者直接这样调用
       getResult(1, 2, function($i, $j) {
           $ilen = strlen($i);
           $jlen = strlen($j);
    
           if($ilen > $jlen) {
               return 1;
           } else if($ilen < $jlen) {
               return -1;
           } else {
               return 0;
           }
       });
    ?>

    再来看看JAVA匿名类的实现
    MyComparator.java

    public interface MyComparator<E> {
        int compare(E e);       
    }

    Game.java

    public class Game<E> {
        public void play(E[] array, MyComparator mc) {
            int result = mc.compare(array[array.length - 1], array[0]);
    
            if(result > 0) {
                System.out.println("Oh no... You Win");
            } else if(result == 0) {
                System.out.println("Emmm... Draw");
            } else {
                System.out.println("Haha... You Lose");
            }
        }
    }

    Test.java

    public static void main(String[] args) {
            Game<Integer> game = new Game<Integer>();
            Integer[] intArr = {1, 2, 3};
            game.play(intArr, new MyComparator<Integer>() {
                @Override
                public int compare(Integer e1, Integer e2) {
                    if(e1 > e2) {
                        return 1;
                    } else if(e1.equals(e2)) {
                        return 0;
                    } else {
                        return -1;
                    }
                }
            });
        }
    展开全文
  • java匿名函数的使用

    2020-07-23 00:30:14
    java匿名函数的使用 public class Note08_NimingObject { public static void main(String[] args) { PhoneMail mall = new PhoneMail(); //匿名函数的使用 mall.show(new Phone()); } } class ...

    java中匿名函数的使用

    public class Note08_NimingObject {
    	public static void main(String[] args) {
    		PhoneMail mall = new PhoneMail();
    		
    		//匿名函数的使用
    		mall.show(new Phone());
    	}
    	
    }
    
    class Phone{
    	public void sendEmail(){
    		System.out.println("SEND EMAIL");
    	}
    	
    	public void playGame(){
    		System.out.println("PLAY GAME");
    	}
    	
    	
    }
    
    class PhoneMail{
    	public void show(Phone phone){
    		phone.sendEmail();
    		phone.playGame();
    	}
    }
    

    show方法中,匿名的phone对象以形参的形式压在栈中不断对堆中的对象进行调用,相当于一个对象在未署名的情况下先进行操作,可以之后再署名。

    展开全文
  • JavaScript匿名函数理解及应用

    千次阅读 2020-05-08 19:50:11
    匿名函数顾名思义就是没有名字的函数,在实际开发中经常会用到,也是JavaScript的重点。匿名函数又叫立即执行函数。 由于这种函数是匿名的,所以它不能被调用。 由于它不能被调用,所以如果它不立即执行的话就没有...

    匿名函数

    匿名函数顾名思义就是没有名字的函数,在实际开发中经常会用到,也是JavaScript的重点。匿名函数又叫立即执行函数。


    由于这种函数是匿名的,所以它不能被调用。
    由于它不能被调用,所以如果它不立即执行的话就没有了意义。
    由于它需要立即执行,所以在执行完之后匿名函数就会被销毁。
    匿名自执行函数的作用就是用于闭包和创建独立的命名空间两个方面。


    匿名函数的基本形式为(function(){…})();

    前面的括号包含函数体,后面的括号就是给匿名函数传递参数然后立即执行。

    匿名函数的作用是避免全局变量的污染以及函数名的冲突。


    匿名自执行函数的作用

    1.匿名自执行函数最常见的作用是用于实现闭包的情况中。
    闭包:闭包是JavaScript的一种特性,我们可以通过闭包实现函数内外部的连接,并且可以使得函数的局部变量始终存在于内存中。

    2.匿名自执行函数还可以用于在JavaScript中模拟创建块级作用域.
    使用匿名自执行函数将某些代码包裹起来可以实现块级作用域的效果,减少全局变量的数量,在匿名自执行函数执行结束后变量就会被内存释放掉,从而也会节省了内存。


    小括号
    包着函数的小括号的作用:
    小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数包起来的时,实际上小括号对返回的,就是一个匿名函数的Function 对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。

    小括号有返回值,就是小括号内的函数或者表达式的返回值,所以小括号内的function返回值等于小括号的返回值。


    写法
    匿名函数的写法
    1.先定义一个普通函数Cat()

    function Cat(){
    
        alert("喵喵喵~~");
    }
    

    2.去掉函数的名字构建匿名函数
    不包裹一个括号不符合语法要求,会报错!需要给匿名函数外边包裹一个括号才能运行。

    (function (){
    
        alert("喵喵喵~~");
    })()                        //()可省略
    

    3.当匿名函数需要传值,将参数写到括号内

    !(function (data){
    
        alert("喵喵喵~~"+data);
    })("汪汪汪~~")
    

    4种实现方式

    //常见匿名函数:
                //1,匿名函数的第一种实现方式
        		(function(cat){
        			alert(cat);
        		})("喵喵喵~~");
        		//2.匿名自执行函数的第二种实现方式(常用)jQuery 
        		(function(){
        			alert("cat");
        		}());
        		//3.匿名自执行函数的第三种实现方式
        		!function(cat){
        			alert(cat);
        		}("喵喵喵~~");
        		//4.匿名自执行函数的第四种实现方式
        		var fun=function(cat){
        			alert(cat);
        		}("喵喵喵~~");
    //不常见匿名函数:
                
    			~(function(){ 
    			
    			alert('cat'); 
    			})();
    			//效率最高
    			void function(){ 
    			
    			alert('cat'); 
    			}();
    					
    			+function(){ 
    			
    			alert('cat'); 
    			}();
    			
    			-function(){ 
    			
    			alert('cat'); 
    			}();
    			
    			~function(){ 
    			
    			alert('cat'); 
    			}();
    			
    			!function(){ 
    			
    			alert('cat'); 
    			}();
    			//强制执行
    			(function(){ 
    			
    			alert('cat'); 
    			}());
    
    

    匿名函数的应用
    1.绑定事件

    <input type="button" value="点击" id="btn">
    
    ```javascript
    var btn=document.querySelector("#btn");    //querySelector是H5中新增的查找dom元素的方法
        		btn.οnclick=function(){
        			alert("");
        		}
    
    

    2.应用对象

    var obj={
    
        animal:"汤姆猫",
    
        voice:"喵喵喵~~",
    
        CAT:function(){
    
            return "我是"+this.animal+",我会"+this.voice+"叫!";
    
        }
    
    };
    
    alert(obj.CAT());
    

    3.应用函数表达式

    //将匿名函数赋值给变量cat
    var cat=function(){
    
        return "喵喵喵~~"
    }
    //调用方式与调用普通函数一样
    alert(cat());
    

    4、回调函数的应用

    setInterval(function(){
    
        console.log("我是每5秒执行一次的回调函数");
    },5000);
    

    5、返回值

    function cat(){
        //返回匿名函数
        return function(){
    
            return "喵喵喵~~";
        }
    }
    //调用匿名函数
    alert(cat()());
    //或
    var mao=cat();
    alert(mao());
    

    6.链式调用

    (function(animal) { 
    
    alert(animal); 
    
    return arguments.callee; 
    
    })('cat')('dog')('pig');
    

    展开全文
  • Lambda介绍 Lambda,别名函数式编程,维基百科给出以下介绍: ...Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以...
  • Java8函数式编程

    万次阅读 多人点赞 2019-06-13 15:18:48
    于是决心花点时间深入地去研究一下java8的函数式。 (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!) 一、lambda表达式 先po一个最经典的例子——线程 public static...
  • Java 8 函数接口详细教程

    千次阅读 2019-05-12 19:50:56
    Lambdas表达式是匿名函数,可视为语言的一等公民进行处理,如可以作为方法的参数或返回值。 Java 8 之前,我们通常为每种仅需封装单个功能场景要创建一个类。这导致很多不必要的模板代码来定义简单函数表达式。 所.....
  • Scala 闭包 匿名函数

    千次阅读 2012-04-21 17:11:12
    函数语言的名称源于这样一种概念:程序行为应该像数学函数一样;换句话说,给定一组输入,函数应始终返回相同的输出。这不仅意味着每个函数必须返回一个值,还意味着从一个调用到下一个调用,函数本质上不得具有内蕴...
  • JS匿名函数及调用及闭包

    千次阅读 2017-10-27 00:19:41
    ()()这种写法可以说是匿名函数的调用或者叫立即执行函数。   匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值 ...
  • Kotlin的高级语言功能——Lambda和匿名函数、内联函数、扩展函数、高阶函数及协同和挂起的基本语法和使用
  • JavaScript函数应用

    千次阅读 2020-07-19 15:21:07
    文章目录函数为什么要有函数什么是函数函数的定义函数的调用函数的参数案例函数的返回值案例arguments的使用案例函数其它匿名函数自调用函数函数是一种数据类型代码规范 函数 为什么要有函数 如果要在多个地方求1-...
  • java匿名对象的用法

    千次阅读 2017-12-07 17:14:41
    匿名对象:没有名字的对象: new Car(); //匿名对象其实就是定义对象的简写格式。 Car c = new Car(); c.run(); 用匿名对象来书写以上代码: new Car().run(); 匿名对象的使用方法: ...
  • java8新特性从入门到应用 第一章 Lambda表达式及FunctionalInterface函数接口Lambda表达式lambda表达式的特征: [^java-小学生]常用 Lambda写法:FunctionalInterface函数接口@FunctionalInterface 注解java 8中新增...
  • 数组的初始化可以采用下面 静态初始化 的方式 String[] array = {"one", ...对于如ArrayList、LinkedList等函数是否通过上面方式进行初始化的,下面介绍 看起来像是静态初始化 的方式给这类容器类型进行初始化。 ...
  • Java基础之函数式接口

    千次阅读 2020-04-11 16:05:19
    Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口,只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. “语法糖”是指使用更加方便,但是原理不变的代码语法...
  • 在将一个匿名函数作为参数进行传递时,这个语法会经常被用到 部分应用(Partial application) 你可以使用下划线“”部分应用一个函数,结果将得到另一个函数。Scala 使用下划线表示不同上下文中的不同事物,...
  • 1.关于匿名类  var class1={p1:value1,p2:value2};  这个也可以写成  var class1={};  class1.p1=value1;  class1.p2=value2; 首先所有的匿名类都是继承与Object核心对象的,var class1={}...
  • Java如何支持函数式编程?

    千次阅读 2020-09-22 16:11:59
    简介:Java是面向对象的语言,无法直接调用一个函数Java 8开始,引入了函数式编程接口与Lambda表达式,便于开发者写出更少更优雅的代码。什么是函数式编程?函数式编程的特点是什么?本文通过代码实例,从Stream类...
  • 有关函数的系统函数: function_exists():判断某个函数是否被定义过,返回布尔值 func_get_arg(n):获得一个函数的第n个实参值(n从0开始) func_get_args():获得一个函数的所有实参,结果是一个数组 func_num...
  • 1、匿名函数 通过lambda关键字进行定义,语句的结果就是返回值,如下所示:In [32]: def sho_function(a): ...: return a**2 ...: In [33]: equiv = lambda a : a**2 In [34]: print(equiv(3)) 92、函数的参数...
  • java 函数式接口与lambda表达式的关系

    千次阅读 2017-08-27 01:40:39
    java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的。 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,...
  • Java回调函数实现案例

    千次阅读 2020-04-02 09:15:31
    1、什么是回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方...
  • Java反射

    万次阅读 多人点赞 2019-08-28 22:58:42
    概述 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。...很多人都认为反射在实际Java中开发应用中并不广...
  • Java容器类的应用

    千次阅读 2012-05-06 15:24:00
    一、实训目的 1)了解List、ArrayList...深入认识Java容器类,并合理使用Java的容器。 2. 掌握Arrays提供的sort方法的使用. 三、实训内容 (一) 了解Java类库中提供的容器类 Vector 和ArrayList是采用数组方式存
  • 1.关于匿名类 var class1={p1:value1,p2:value2}; 这个也可以写成 var class1={}; class1.p1=value1; class1.p2=value2;首先所有的匿名类都是继承与Object核心对象的,var class1={} 意味着实例化了一个Object...
  • Java函数的传参机制——你真的了解吗?

    千次阅读 多人点赞 2017-02-06 18:38:20
    这篇博客的灵感来源于我参加的一次面试,面试官与我比较深入的讨论了Java函数传参的问题,当时与他讨论了好半天,不知道是面试官自己没彻底弄清楚还是因为他故意想深入考察我对这个知识点的了解程度。Java函数的传参...
  • 【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题...在Java程序中做任何事情都要用对象来实现,函数式编程是种编程方式,.
  • Java 8 Lambda函数编程入门(一)

    千次阅读 2016-09-24 00:55:18
    什么是函数式编程每个人对函数式编程的理解不尽相同。但其核心是:在思考问题时,使用不可变值和函 数,函数对一个值进行处理,映射成另一个值。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,530
精华内容 17,412
关键字:

java匿名函数的实际应用

java 订阅