首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学习Lambda表达式(四):方法引用

为什么要用方法引用1.1 lambda表达式冗余在使用Lambda表达式的时候,也会出现代码冗余的情况,比如:用Lambda表达式求一个数组的和package com.bobo.jdk.funref;​...表达式中要执行的代码和我们另一个方法中的代码是一样的,这时就没有必要重写一份逻辑了,这时我们就可以“引用”重复代码package com.bobo.jdk.funref;​import java.util.function.Consumer...方法引用的格式符号表示:::符号说明:双冒号为方法引用运算符,而它所在的表达式被称为方法引用应用场景:如果Lambda表达式所要实现的方案,已经有其他方法存在相同的方案,那么则可以使用方法引用。...String[] a2 = fun2.apply(5); System.out.println("数组的长度是:" + a2.length); }小结:方法引用是对Lambda表达式符合特定情况下的一种缩写方式...,它使得我们的Lambda表达式更加的精简,也可以理解为lambda表达式的缩写形式,不过要注意的是方法引用只能引用已经存在的方法。

42000

Java基础(二十五):Lambda表达式、方法引用、构造器引用

表达式、方法引用、构造器引用 Java基础(二十六):Java8 Stream流及Optional类 一、Lambda表达式 1、语法 Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符...方法引用,可以看做是基于lambda表达式的进一步简化 1、方法引用格式 情况1:对象 :: 实例方法名 函数式接口中的抽象方法a在被重写时使用了某一个对象的方法b 如果方法a的形参列表、返回值类型与方法...当Lambda表达式是创建一个对象,并且满足Lambda表达式形参正好是给创建这个对象的构造器的实参列表,就可以使用构造器引用 格式:类名::new 空参构造器 @Test public void...当Lambda表达式是创建一个数组对象,并且满足Lambda表达式形参正好是给创建这个数组对象的长度,就可以数组构造引用 格式:数组类型名::new @Test public void test3()...,传入某些参数,就可以简化为Lambda表达式或方法构造器引用

12910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java之Lambda表达式与方法引用实战

    开始为了简化使用者进行代码开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,Scala,利用函数式的编程可以避免掉面向对象编程之中的一些繁琐的问题...Lambda表达式如果要想使用,那么必须有一个重要的实现要求:SAM(Single Abstract Method)只有一个抽象方法(但可以有default和static方法)。...以IMessage接口为例,在这个接口里面发现只是提供有一个send()方法,除此之外没有任何其他方法定义,所以这样的接口就被称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用 jdk1.8...System.out.println(fun.upper()); } } 输出结果为:hahaha 2.3 引用特定类型的方法 在方法引用时也可以引用特定类中的一些操作方法,...3 内建函数式的接口 在jdk1.8之中提供有Lambda表达式,也提供有方法引用,但是你会发现现在如果由开发者自己定义函数式接口,往往都需要使用“@FunctionalInterface”注解来进行大量申明

    52440

    Java方法引用(Method References):什么是方法引用?如何与Lambda表达式结合使用?

    引言 在Java 8中,除了Lambda表达式,方法引用(Method References)也是一项重要的特性。...方法引用是一种简洁的语法糖,可以让你在代码中直接引用已有方法,与Lambda表达式结合使用,代码更加清晰简洁。本篇文章中,猫头虎将详细解析: 什么是方法引用?...方法引用的定义 方法引用是Lambda表达式的简化形式,它通过::操作符来引用已有的方法或者构造函数。 核心思想:Lambda表达式可以直接调用一个已存在的方法,方法引用让代码更加简洁。...方法引用简化了Lambda调用已存在方法的语法。 Q&A互动答疑 Q:Lambda表达式和方法引用有什么区别? A:方法引用是Lambda表达式的一种简化形式。...当Lambda表达式中只是调用一个已有方法时,使用方法引用可以让代码更简洁。 Q:如何选择Lambda表达式还是方法引用? A: 如果代码简单、逻辑明确,可以直接使用方法引用。

    17210

    Java-Lambda表达式和“方法引用”的对比和详解

    4.2小节中构造方法在Lambda表达式中的调用,其更像一种工厂方法返回一个对象的引用,在创建实现接口的对象的时候工厂方法并不被执行。...方法引用的定义: 快速将一个Lambda表达式的实现指向一个已经写好的方法 方法引用可以看作是lambda表达式的特殊形式,或者称之为语法糖。...一般方法已经存在才可以使用方法引用,而方法若未存在,则只能使用lambda表达式。  我们可以采用两种方式来在Lambda表达式中调用其他方法,第一种如一般的方法调用,第二种就是方法引用。...4.4 方法引用和Lambda表达式的对比:  方法引用比Lambda表达式更加简洁,但同时也更难理解其语法,所以我们以下用做对比的方法来理解表达式。...总结 总结: Lambda表达式和方法引用的目的都是使用具体的方法来代替接口中抽象的方法,但是在实际使用中,调用的是接口中被实现的方法名,lambda表达式和方法引用只应用于接口实例的方式实现了的构造过程

    3.3K72

    Java 8 - 06 Lambda 和方法引用实战

    Pre 前几篇文章,我们已经学习了行为参数化、匿名类、Lambda表达式和方法引用,实现了给工程师按照职位排序的功能 enginnerlist.sort(comparing(Enginner::getJob...表达式 Java 8引入了Lambda表达式,它提供了一种轻量级语法来实现相同的目标:传递代码 。...在需要函数式接口的地方可以使用Lambda表达式, 回顾一下:函数式接口就是仅仅定义一个抽象方法的接口。抽象方法的签名(称为函数描述符)描述了Lambda表达式的签名。....getJob().compareTo(o2.getJob())); Java编译器可以根据Lambda出现的上下文来推断Lambda表达式参数的类型。...前面解释过,方法引用就是替代那些转发参数的Lambda表达式的语法糖。

    33530

    java lambda方法引用总结——烧脑吃透

    lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。..."String::toUpperCase" 可以用lambda表达式中参数的指定成员方法(这个成员方法的参数比FI要求的参数少一个改类型的参数)改写, * 那么就可以使用 "类的实例方法"来表示方法引用...* * 或者说:如果lambda表达式的lambda体中使用的方法是参数匹配的方法,那么方法引用表达式就用"类引用对象的实例方法"。..."new Print()::println" 可以用lambda表达式中参数的具体对象的参数匹配的成员方法改写, * 那么就用 "对象的实例方法"来表示方法引用。...* * 或者说:如果lambda表达式的lambda体中使用的方法来操作lambda的参数,那么方法引用表达式就用"对象的实例方法"。

    78720

    Java 8 函数式接口、lambda表达式、方法以及构造器引用

    lambda表达式 通过lambda表达式我们可以将函数式编程在java的面向对象中形象化。...对象是java语言的基本,我们不可能离开对象单独去使用方法,这也是为什么java提供lambda表达式仅仅能使用函数式接口的原因。...如果只有一个抽象方法,那么使用lambda表达式就不会存在困惑了。...,所以我们可以使用lambda表达式创建它的实例 因为 run()方法咩有参数,所以我们的lambda表达式也没有参数 就像if-else语句一样,如果只有一行代码的话我们可以省去{}符号了。...不能修改final变量y (x, int y) -> x+y // 错误,无法推断混合类型 方法、构造器引用 java8可以使用冒号表达式来引用方法: System::getProperty

    33520

    你真的了解 Java 8 中的 lambda 表达式、方法引用、函数式接口、默认方式、静态方法吗

    lambda 表达式 lambda 表达式在项目中也是用到了,这种新的语法的加入,对于使用 Java 多年的我,我觉得是如虎添翼的感觉哈,这种新的语法,大大的改善了以前的 Java 的代码,变得更加的简洁...(x); 4 }); 在原始的方式中,我们一般使用 foreach 的方式进行遍历,有了 Java8 的方式之后,我们可以用 forEach 方法,然后,再用 lambda 表达式的方式进行遍历....]) -> { 2} 方法引用 方法引用其实是 lambda 表达式的部分的简化,也就是为了简化 lambda 表达式而存在的感觉,下面我们还讲讲怎么使用方法引用。...我们用的是 lambda 表达式来获取每个字符串的长度。...1s -> s.length() 在第二个测试中,我们使用的是静态方法引用来获取每个字符串的长度。 1String::length 在第三个测试中,我们使用的是实例方法引用。

    1.2K20

    方法引用与构造器引用

    方法引用(Method References)  当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!  方法引用可以看做是Lambda表达式深层次的表达。...换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。... 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的 方法的参数列表和返回值类型保持一致!  格式:使用操作符 “::” 将类(或对象) 与 方法名分隔开来。...,并且第二 个参数是需要引用方法的参数(或无参数)时:ClassName::methodName   构造器引用  格式: ClassName::new与函数式接口相结合,自动与函数式接口中方法兼容...可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象 方法的参数列表一致!且方法的返回值即为构造器对应类的对象。

    33620

    JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)

    Java8新特性:方法引用与构造器引用Lambda表达式是可以简化函数式接口的变量或形参赋值的语法。而方法引用和构造器引用是为了简化Lambda表达式的。...3.1 方法引用当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!方法引用可以看做是Lambda表达式深层次的表达。...换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。...Lambda表达式是创建一个对象,并且满足Lambda表达式形参,正好是给创建这个对象的构造器的实参列表,就可以使用构造器引用。...Lambda表达式是创建一个数组对象,并且满足Lambda表达式形参,正好是给创建这个数组对象的长度,就可以数组构造引用。

    80310

    3.方法引用与构造器引用

    本文最后更新于 894 天前,其中的信息可能已经有所发展或是发生改变。 方法引用 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!...(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!) 方法引用:使用操作符 “::” 将方法名和对象或类的名字分隔开来。...Math.pow(x,y) Math::pow (x,y)->x.equals(y) String::equals 注意:当需要引用方法的第一个参数是调用对象,并且第二个参数是需要引用方法的第二个参数...(或无参数)时:ClassName::methodName 构造器引用 格式: ClassName::new 与函数式接口相结合,自动与函数式接口中方法兼容。...可以把构造器引用赋值给定义的方法,与构造器参数列表要与接口中抽象方法的参数列表一致!

    25410

    Java8新特性Lambda表达式&Stream流&方法引用最全集锦

    流的一个核心好处是,它使得程序更加短小并且更易理解。当 Lambda 表达式和方法引用和流一起使用的时候会让人感觉自成一体。流使得 Java 8 更添魅力。...接下来,我们使用 sorted() 方法排序。最终使用 forEach() 方法遍历输出,它根据传递给它的函数对每个流对象执行操作。在这里,我们传递了一个可以在控制台显示每个元素的方法引用。...正则表达式 Java 的正则表达式将在字符串这一章节详细介绍。Java 8 在 java.util.regex.Pattern 中增加了一个新的方法 splitAsStream()。...Lambda 表达式中的第一个参数 fr0 是上一次调用 reduce() 的结果。而第二个参数 fr1 是从流传递过来的值。...reduce() 中的 Lambda 表达式使用了三元表达式来获取结果,当其长度小于 50 的时候获取 fr0 否则获取序列中的下一个值 fr1。

    2.4K21

    Stream流、方法引用

    Consumer接口是一个消费型的函数式接口,可以传递Lambda表达式,消费数据 简单记: forEach方法,用来遍历流中的数据 是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法 *...super T> predicate); filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤 Predicate中的抽象方法: boolean test...s); }); /* 分析: Lambda表达式的目的,打印参数传递的字符串 把参数s,传递给了System.out对象,调用out对象中的方法println对字符串进行了输出...注意: 1.System.out对象是已经存在的 2.println方法也是已经存在的 所以我们可以使用方法引用来优化Lambda表达式 可以使用System.out方法直接引用(调用)println.../* marry(()->{ //使用this.成员方法,调用本类买房子的方法 this.buyHouse(); });*/ /* 使用方法引用优化Lambda表达式

    1.1K30

    带你彻底掌握 Java 中的方法引用

    一句话介绍: 方法引用(Method Reference)是在 Lambda 表达式的基础上引申出来的一个功能。 先不铺展概念,从一个示例开始说起。...Lambda 表达式:遍历打印列表的元素。...这个比 Lambda 表达式还省事,Lambda 表达式是在不继承接口的基础上,直接用形如 () -> {} 的方式变相实现了抽象方法,方法引用是直接用已存的方法来指代该抽象方法!...表达式 和第二种类似,只不过随着 JDK8 版本中 Lambda 表达式的出现,可替换以往的匿名内部类,代码实现上做到更简洁: // Lambda 表达式的实现 Collections.sort(animalList...四、总结 如上所述,方法引用有多种类型,在实际使用过程中,可灵活运用。 说到底,跟 Lambda 表达式一样,它还是一种语法糖,为我们的开发工作提效。

    66910

    【Java学习】方法的引用

    被引用的方法的功能要满足当前的需求 以Arrays中的静态方法 sort() 为例,其中的参数就是一个函数式接口,先来用匿名内部类和lambda的方式演示一下 需求:把数组中的元素降序排列 public...方法引用的分类 2.1 引用静态方法 格式: 类 :: 方法名 需求:获取集合中的数字部分 如果说使用之前的方法来解决,就是再定义一个集合,在循环中调用parseInt()方法,再把结果添加到新集合中...对于抽象方法中的形参:第一个参数表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流中,第一个参数一般都表示流里面的每一个数据,如果说流里面的是字符串类型,那么使用这种方式进行方法引用...方法引用的优点 简洁性:方法引用通常比Lambda表达式更简洁,特别是当Lambda表达式只是简单地调用一个已存在的方法时。...可读性:对于熟悉的方法名,方法引用比Lambda表达式更容易理解。 减少样本模板:方法引用减少了编写Lambda表达式时的样板代码,使代码更加清晰。

    8310

    方法引用初体验

    方法引用详解 方法引用对标于Lambda代码块,我们可以通过两者对比来学习方法引用 方法引用初体验 在学习Lambda时,我们创建接口,并直接采用Lambda代码块来代替书写继承类直接执行编译 下面给出代码示例...:该符号为引用运算符,而它所在的表达式被称为方法引用 回顾对比一下我们体验方法引用的代码: Lambda代码块:useInter(s -> System.out.println(s)); 方法引用:useInter...(System.out::println); 我们可以看到我们直接使用System.out中的println,省略掉了参数的书写以及参数的带入,而是直接使用方法 推导和省略: 如果使用Lambda,那么根据...“可推导就是可省略”原则,无需指定参数类型,无需指定重载形式,他们都将被自动推导 如果使用方法引用,那么同样可以实现自动推导 方法引用时Lambda的孪生兄弟 方法引用四种方法 方法引用可以分为四种情况...引用类的实例方法,实质上是引用类中的成员方法(注意:这里的成员方法是有对象的) 格式:类名::成员方法 范例:String::subString 下面给出示例代码: public class Demo

    29030

    Java 方法引用_特性

    JAVA8 方法引用:(四种方法引用的使用)   对象引用的特点:不同的对象可以操作同一块的内容;而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字。...引用静态方法:   类名称 :: static 方法名称 引用某个对象的方法:   实例化对象 :: 普通方法 引用特定类型的方法:   特定类 :: 普通方法 引用构造方法:   类名称 :: new.../** * 实现方法的引用接口 * @param 引用方法参数的类型 * @param 引用方法返回的类型 */ interface IMessage { public...// 本代码中,将toUpperCase()函数的应用交给了IMessage接口的upper方法 IMessage msg = "Hello" ::...Book类中的构造方法 // 调用的create实际上是调用的Book.Book()构造方法 Book book = msg.create("Java Fail",12.2

    64020

    10-方法引用

    方法引用概述 目的 方法引用是为了进一步简化Lambda表达式的写法 格式 类型或对象::引用的方法 //关键语法 “::” 实例 package ComparatorDemo; import...表达式的方法 lists.forEach(s -> System.out.println(s)); //方法引用(前提:必须形如上式前后的参数一致)...被引用的方法的参数列表和函数式接口中的抽象方法的参数列表必须完全一致 如果函数式接口中的抽象方法有返回值,则被应用的方法也必须有相同返回值 如果函数式接口中的抽象方法没有返回值,则被应用的方法也可以有返回值...,也可以没有 实例 首先在Student类中重写一个静态方法 //首先定义静态方法 public static int compareByAge(Student s1,Student s2){...的简化写法 println本身是实例方法,out是输出流对象,并且前后参数完全一致,所以可以用方法引用简化 构造器引用 格式 类名::new 注意 前后两个参数一致并且在创建对象的情况下就可以使用构造器引用

    25920
    领券