任何lambda表达式可以被看作是一个函数式接口的功能描述的匿名表示。代表一个函数描述符的另一种方法是使用现有类的具体方法。方法引用就是这些现有方法的句柄。例如:
String::valueOf
Integer::compare
是静态方法的引用,类似于没有捕获任何实例或局部变量的lambda表达式。(实例方法引用在下一节阐述)举一个简单的例子,在类java.util.Arrays中的方法
public static <T> void sort(T[] a, Comparator<? super T> c);
第二个参数要求一个Comparator接口。该方法Integer.compare有一个签名类型兼容于Comparator函数描述,也就是说,所以像这样调用Arrays.sort它的比较方法是合法的:
Arrays.sort(myIntegerArray, Integer::compare)
在这个简单的例子中,引用的方法签名Integer::compare,正好(通过类型擦除)与Comparator的函数描述符相匹配。一般情况下,精确匹配是没有必要的:在这样的调用下,方法引用可以被看作是由一个lambda表达式的简写,从函数描述符和调用引用的方法体复制的一个形式参数列表。
请注意,该语法引用类型::标识符用来引用静态方法,如上面的例子也可以用来引用实例方法。
原文链接:http://www.lambdafaq.org/what-are-method-references/
分享到:
相关推荐
一、Lambda表达式基础 1. **什么是Lambda表达式?** Lambda表达式是一种新的语法结构,它可以被看作是一段没有名字的函数。这种函数可以接受零个或多个参数,但不包含任何方法名,只包含一组表达式。Lambda表达式...
Lambda 表达式是 C# 编程语言中的一个重要概念,也是函数式编程的基础。Lambda 表达式可以被用作创建委托对象或表达式树类型。所有的 Lambda 表达式都使用操作符“=>“,表示“goes to (转变为)”。 Lambda 表达式...
1. Lambda表达式基础: Lambda表达式是Java 8引入的一种简洁的表示可传递的匿名函数的方式。它允许我们将函数作为参数传递给方法,或把代码作为数据处理。Lambda表达式由参数列表、箭头符号“->”和方法体三部分组成...
C++ 11引入了lambda表达式,这是一个强大的特性,极大地增强了C++的函数式编程能力。Lambda表达式允许在程序中直接定义匿名函数,并且可以直接在需要的地方使用,无需预先声明。这对于处理回调函数、简化算法实现...
3. **方法引用**:当Lambda体完全等同于某个已存在的方法时,可以使用方法引用来替代Lambda表达式,如 `Arrays.sort(list, Comparator.comparingInt(Integer::intValue))`。 4. **构造器引用**:同样,Lambda 表达式...
另一个重要的功能是方法引用,它允许我们直接引用一个方法,而不是使用Lambda表达式。方法引用可以是静态方法、实例方法和构造函数的引用。例如,可以引用String的length()方法: ```java names.stream() .map...
4、函数式接口使用:学习如何使用Lambda表达式与Java中的函数式接口进行交互,包括传递函数、使用函数式接口的默认方法和方法引用。 本源码资源旨在帮助用户掌握以下几个方面: 1、Lambda表达式概述:了解Lambda...
标签“表达式”暗示了教程可能涉及Lambda表达式在不同上下文中的用法,如在方法引用、构造器引用、比较操作和条件表达式中的应用。此外,Lambda表达式还能与Java的其他新特性,如方法引用来协同工作,如 `list.sort...
Java 8 中 Lambda 表达式的基础使用 Java 8 中的 Lambda 表达式是 Java 8 中最流行最常用的功能特性之一。它将函数式编程概念引入 Java,函数式编程的好处在于可以帮助我们节省大量的代码,非常方便易用,能够大...
一、Lambda表达式基础 Lambda表达式本质上是一种匿名函数,它没有名称,但可以作为参数传递,也可以存储在变量中。其基本语法格式为:(parameters) -> expression,其中parameters是输入参数(可选),expression是...
一、Lambda表达式基础 1. 定义:Lambda表达式是一种可以被赋值给变量、作为参数传递或作为返回值的函数。它的语法结构为`(参数列表) => 表达式`或`(参数列表) => { 函数体 }`。其中,`=>`称为箭头运算符,左边是...
Lambda表达式的使用前提包括:接口中只有一个抽象方法(函数式接口),以及使用Lambda表达式引用的变量必须是最终变量或者事实上的最终变量。 总结来看,理解线程通信概念和等待唤醒机制对于开发多线程程序至关重要...
一、Lambda表达式基础 1. **什么是Lambda表达式**:Lambda表达式本质上是一个匿名函数,它可以被赋值给一个变量,作为参数传递给方法,或者在某些情况下直接作为方法体。Lambda表达式由三部分组成:参数列表、箭头...
在C#编程语言中,委托、事件和Lambda表达式是三个非常重要的概念,它们构成了C#强大功能的基础。本文将详细解析这些知识点,帮助你深入理解并熟练运用它们。 首先,我们来谈谈委托(Delegate)。委托在C#中类似于...
在这个主题中,我们将深入探讨"进度条"、"Lambda表达式"、"匿名方法"、"委托"、"类"、"集合"以及"初始化"这些核心概念,它们都是.NET框架中的重要组成部分。 首先,让我们来看一下"进度条"。在开发用户界面时,...
如果Lambda体中的代码只是简单地调用了一个方法,那么我们可以直接使用方法引用来代替整个Lambda表达式。例如,`Arrays.sort(list, (a, b) -> a.compareTo(b))`可以改写为`Arrays.sort(list, Comparator.comparing...
Lambda表达式可以作为方法参数,这使得函数式接口成为高阶函数的基础。Java 8引入了一些内置的函数式接口,如`java.util.function.Function`、`java.util.function.Consumer`和`java.util.function.Predicate`,它们...
它们是Lambda表达式的主要目标,因为Lambda表达式不能直接赋值给非函数式接口的引用。Java 8中,如果一个接口只有一个抽象方法,那么就可以被用作Lambda表达式的目标类型。 定义函数式接口的基本格式如下: ```...