• 我的订阅
  • 科技

耿老师教你学Java:Lambada表达式与高阶函数以及无限分式

类别:科技 发布时间:2023-01-31 09:00:00 来源:书圈

Lambada表达式与高阶函数

耿祥义

1. Lambada表达式

下列computeSum是一个通常的方法(也称函数):intcomputeSum( inta, intb ) { returna+b; }

Lambda表达式就是一个匿名方法(函数),用Lambda表达式表达同样功能的匿名方法是:(int a,int b) -> {return a+b;}

或(a,b) -> {return a+b;}

即Lambda表达式就是只写参数列表和方法体的匿名方法(参数列表和方法体之间的符号是->):(参数列表)-> {方法体}

●Lambada表达式的值

Lambda表达式的值就是它表示的 匿名方法的入口地址。不要混淆Lambda表达式的值和Lambda表达式代表的匿名方法的返回类型,Lambda表达式代表的匿名方法的返回类型可以是Java允许的任何类型,比如void型,基本类型或引用类型(如,类,接口等类型)。

2.Function泛型接口

Function泛型接口是一个函数接口(有关知识点参见后面的推荐阅读),因此可以将Lambada表达式的值,即它表示的匿名方法(函数)的入口地址,赋值给Function泛型接口声明的变量,其中T是Lambda表达式代表的匿名方法的参数类型,R是匿名方法的返回类型(本文只讨论单参数或无参数Lambda表达式,多参数见后面给出的推荐阅读)。Function泛型接口声明的变量称为一个函数变量,也可以结合上下文简称为函数。简单的说,可以将Lambada表达式的值,即匿名函数的地址赋值给函数变量,例如:Function f = (Integer a)->{ return a*a;}Function m = (Integer a)->{ System.out.print(a+8);return null;};

函数f或g通过调用apply(T)(Function泛型接口中的方法)来执行Lambda表达式代表的匿名方法,例如

f.apply(3)得到的值是9.0 g.apply(5) 在命令行输出13

3.高阶函数与compose方法

可以使用compose方法实现匿名方法的复合,即得到所谓的高阶函数(函数式编程的重要手段) compose(Function before)

返回一个组合函数,参数before函数的返回值作为实参,赋值给当前函数的参数,当前函数的返回类型是组合函数的返回类型。

例如:Function f = (Integer a)->{ return (double)a*a;}Function g = (Integer x)->{ return x+1;}

当前函数f与函数 g得到复合函数 hFunction h = f.compose(g);

得到的复合函数h就是 (Integer x){return (double)(x+1)*(x+1);}

h.apply(2)得到的返回值是9.0

●下列程序显示了Function泛型接口的用法。

耿老师教你学Java:Lambada表达式与高阶函数以及无限分式

import java.util.function. Function; publicclassE1{ publicstaticvoid main(String args[]) { Function< Integer, Double> fOne= (Integer a)-> { return(double)a*a;}; System.out.println(fOne.apply( 3)); //输出:9.0Function< Void, Void> fTwo= (Void v)-> { System.out.println( "你好"); returnnull;}; //无参数,返回类型是voidfTwo.apply( null); //命令行输出:你好Function< Integer, Void> fThree= (Integer a)-> { System.out.println(a+ 8); returnnull;}; fThree.apply( 5); //命令行输出:13Function< Integer, Double> f= (Integer a)-> { return(double)a*a;}; Function< Integer, Integer> g= (Integer x)-> { returnx+ 1;}; Function< Integer, Double> h= f. compose(g); System.out.println(h.apply( 5)); //输出:36.0

}}

4. 无限分式

形如(a是正整数)

a/a+(a/(a+(a/a+(a/a+….

称为无限分式,无限分式的值是无理数。当a等于1时,无限分式是黄金分割数(0.618...)如图所示意。

耿老师教你学Java:Lambada表达式与高阶函数以及无限分式

在这里,我们用Lambda表达式计算无限分式的近似值(学习循环语句时,可以用循环语句来求无限分式的近似值),例如,Function< Double, Double> f= (x)-> { return1/(1+x);}

然后通过f的高级函数,即f不断的复合自己得到的函数来计算无限分式的近似值。

●程序与运行效果import java.util.function.Function;public class E2 {public static void main(String args[]) {Function f = (Double x)->{ return 1/(1+x);};int i = 1;while(i<=10) {f = f.compose(f);i++;}System.out.println(f.apply(1.0)); }}

‍返回搜狐,查看更多

责任编辑:

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2023-01-31 10:45:14

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

...查:第3题平行线的性质、第6题待定系数法求正比例函数表达式、第7题正方形和相似的性质、第8题二次函数的性质、第18题矩形及全等的判定与性质;对数学基本运算的考查:第4题一元一
2024-06-23 03:19:00
large函数表达式排序公式写法和含义
...作用是返回列表中指定第K大的值。其语法图如下所示:表达式为:=large(单元格区域,第K大) 根据其语法表达,我们可以输入一个公式
2023-02-23 11:40:00
excel中常用的6个取整函数,你知道吗?
...数字有多长多大,全部向小于且最接近的整数取值。它的表达式也很简单,=int(值)。二、trunc函数 这个函数可能大家有点陌生,但它是用来截取数字指定位数的函数,在下图中公
2023-02-24 11:42:00
index+n+if函数的组合
...11,IF(B2:B11=G2,ROW($1:$10),\"\"),1)IF(B2:B11=G2,ROW($1:$10)
2023-02-23 11:42:00
excel中最常用的10个函数
...有数据支撑的。 下面就简单介绍一下10个函数的作用和表达式语法。一、sum函数sum函数即求和函数,主要用来计算两个或多个值,或者单元格区域的求和计算,最常用于一个单元格区
2023-02-24 11:42:00
excel中大小于符号的使用
...大小于符号的使用又有两种情况,一个是作为函数参数中表达式的运算符,另一个是作为单独的一个条件参数。1.函数中表达式的运算符我们需要设置一个优势科目,当语文分数高于数学时,优势
2023-02-23 11:47:00
excel中countif函数的使用大全
...先介绍在excel中计算排名的专用函数——rank。rank函数的表达式为:=rank(数值,引用区域,排位方式)RANK函数三个参数中
2023-02-24 11:33:00
excel数字转换为中文大写
...函数等。其中numberstring函数是新版本中出现的函数,它的表达式为:=numberstring(值,样式)
2023-02-24 11:45:00
excel中如何提取字符的前中后位置
...个函数公式中,也使用了iferror函数来进行容错,即当left表达式的结果为错误时,会返回一个指定值,这里设置的是A2,照应之前的一句话,“单元格文本没有符号,则返回原文本
2023-02-23 11:44:00
更多关于科技的资讯: