java 8 lambda 申明_2019-02-03——Java8 Lambda

一.认识Lambda

Lambda表达式专门针对只有一个方法的接口(即函数式接口)

lambda表达式的基本格式为(x,y...)—>{表达式...};

(1)可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

(2)可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

(3)可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

(4)可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

在我的理解看来更像是实现一个函数式接口; x,y...表示抽象方法的入参数,表达式实际上是抽象的具体实现,

比如:

首先定义了一个函数式接口:

public interface Operation{

int operator(int x,int y);

}

其次定义一个方法,入参为该接口类型

public class Test{

public void t(Operation o){

o.operator(x,y);

}

}

最后调用t方法的方式:

第一种,也是最古老的一种传入一个Operation接口的实现

public void m(){

t(new Operation(){

@Override

public int operator(int x,int y){

return x*x+y*y;

}

});

}

2.第二种,使用lambda表达式

public void m(){

t((x,y)->x+y);

}

3.第三种,也就是方法引用

(1)首先需要一个方法

public class Other{

public static int other(int m,int n){

return m*n;

}

}

(2)其次在t方法中进行方法引用

public void m(){

t(Other::other);

}

最终的效果就是:

public void m(){

t(new Operation() {

@Override

public int operator(int x, int y) {

return x*x+y*y;

}

});

t((x,y)->x+y);

t(Other::other);

}

比较一下Other类的other方法和Operation接口的operator方法可以看出两个方法都是传入两个int型参数返回一个int类型的值。

我觉得Java8的函数式编程打破了以往的束缚,在以往方法定义了一个类型的入参,在调用方法的时候必须传入该类型的实例。但是函数式接口却打破了这一约束,把函数式接口当作形参感觉更像是传入方法的实现而非接口的实现

Lambda表达式并非是方法的实现

对于方法的引用我们可以换个写法

public void m(){

t((x,y)->Other.other(x,y));

}

如果不够清晰可以在定义一个方法

public static String another(int x,int y,int z){

return (x*y*z)+"";

}

对该方法的引用如下

public void m(){

t((x,y)->{

String another = Other.another(x, y, 10);

return Integer.parseInt(another);

});

}

通过这个写法可以看出对方法的引用其实是一种对接口实现的简化。

(1)简化了方法调用

(2)简化了返回值

(3)简化了大括号

最后在比较一下几种调用方式:

public void m(){

t(new Operation() {

@Override

public int operator(int x, int y) {

return x*x+y*y;

}

});

t((x,y)->x+y);

t(Other::other);

t((x,y)->Other.other(x,y));

t((x,y)->{

String another = Other.another(x, y, 10);

return Integer.parseInt(another);

});

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 数字排列组合

编辑程序让任意四个数字排列组合并且每一个排列组合的数字都不相同。 结果展示 完整代码 #include <stdio.h> //定义头文件 int main() {int i,j,k;printf("\n");for(i1;i<5;i){ //三重循环 for(j1;j<5;j){for(k1;k<5;k){ //确保 i j k 位置不同 i…

java 汇总_java基础汇总

1.关于Http和Hibernatet里面Session的区别HttpSessionHttpSession&#xff1a;是一个抽象接口&#xff0c;J2EE的Web程序在运行的时候&#xff0c;会给每一个新的访问者建立一个HttpSession&#xff0c;这个Session是用户身份的唯一标示&#xff0c;WEB 会话跟踪用的。【注:是容…

C 天数的计算

根据程序提示输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff0c;并进行输出显示。 效果演示 完整代码 #include <stdio.h> int main() {int day,month,year,sum,leap;printf("\n请输入年、月、日&#xff0c;格式为&#xff1a;年,月,日&#…

java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密

自动登录问题和MD5加密前面已经完成了Filter的自动登录&#xff0c;但是有问题&#xff0c;我们在web.xml中Filter的url-mapping中配置的规则是/*, 也就是这个网站的所有请求都拦截。这肯定不合适。我们本来访问/login.jsp&#xff0c;本来就是去登录&#xff0c;结果也进行了拦…

C 从小到大排序

将数字按从小到大的的顺序进行排序输出&#xff0c;根据提示输入相应的数字个数&#xff0c;每输入一个数字要进行换行然后输入下一个数字&#xff0c;当三个数字完全输入之后点击回车&#xff0c;程序会根据从大到小的顺序进行数字的排序输出。 效果演示 完整代码 #include…

java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件

常量的类型有12种CONSTANT_Utf8_info1字面量UTF-8编码的字符串CONSTANT_Integer_info3字面量整型字面量CONSTANT_Float_info4字面量浮点型字面量CONSTANT_Long_info5字面量长整型字面量CONSTANT_Double_info6字面量双精度浮点型字面量CONSTANT_Class_info7符号引用类或接口的符…

C 输出图案

在C语言中使用 * 号输出各种图案。 用 * 输出字母C 效果 完整代码 #include <stdio.h>int main() {printf("用 * 号输出字母 C\n");printf(" ****\n");printf("*\n");printf("*\n");printf(" ****\n");} 用 * 输出…

C 多数排序

使用C语言编写程序对多个数字进行排序输出的操作。 根据提示输入十个数字并按照从小到大的顺序进行输出显示。 效果 完整代码 #include<stdio.h> #define N 10 int main() {int i,j,a[N],temp;printf("请输入 10 个数字&#xff1a;\n");for(i0;i<N;i)s…

java httppost wsdl_Java使用HttpUrlConnection调用webService(wsdl)

首先需要下载工具https://pan.baidu.com/s/1XQ-VubxcPFoqwGm7wierHg下载成功后解压打开exe程序&#xff0c;在wsdl endpoint中输入你wsdl的地址&#xff0c;点击get&#xff0c;等待一小会后会跳到invoke标签下的界面点击某个方法&#xff0c;例如上图的login&#xff0c;可以看…

php判断一个字符串是否为纯数字,php判断变量是否为纯数字字符串的方法

在php中有时候需要判断一个变量的值是否为数字或是否为数字字符串&#xff0c;而php中也提供了一个很好用的内置函数 is_numeric()&#xff0c;可以很轻松的来检测变量。php is_numeric() 函数介绍is_numeric()&#xff1a;检测一个php的变量是否为数字或数字字符串。语法&…

C 反向输出

使用C语言的递归方法对输入的字符进行反向输出。 效果 完整代码 #include <stdio.h>int main() {int i5;void palin(int n);printf("请输入5个字符\40:\40");palin(i);printf("\n"); } void palin(n) int n; {char next;if(n<1) {nextgetchar(…

C 数组逆序输出

编写程序对固定内容的数组进行逆序输出&#xff0c;第一个值和最后一个值的位置互换。 效果 完整代码 #include<stdio.h> #define N 10 int main() {int a[N]{10,100,20,43,54,15,6,77,82,91};int i,t;printf("原始数组是:\n");for(i0;i<N;i)printf(&quo…

php修改http header,php header函数的常用http头设置

//okheader(‘HTTP/1.1 200 OK);//设置一个404头:header(‘HTTP/1.1 404 Not Found);//设置地址被永久的重定向header(‘HTTP/1.1 301 Moved Permanently);//转到一个新地址header(‘Location: http://www.example.org/‘);//文件延迟转向:header(‘Refresh: 10; urlhttp://www…

C 论大小

比较两个数字的大小并进行判断输出。 效果 完整代码 #define LAG > #define SMA < #define EQ #include <stdio.h> int main() {int i,j;printf("请输入两个数字&#xff1a;\n");scanf("%d %d",&i,&j);if(i LAG j)printf("%…

php读这文件速度,php 测试硬盘读写-php 测试硬盘写速率

使用php写入一个1GB大小的文件&#xff0c;检查硬盘的写速率&#xff0c;可能有一定误差&#xff0c;建议还是使用专业的硬盘测试工具来检测一般电脑读写在20M/s&#xff0c;这个测试要执行大概40-50s仅供参考&#xff1a;set_time_limit(0);$str str_pad($str, 512, "0&…

php替换算法,PHP实现各种经典算法 || 我们的爱的博客

以下是代码片段&#xff1a;//--------------------// 基本数据结构算法//--------------------//二分查找(数组里查找某个元素)function bin_sch($array, $low, $high, $k){if ( $low < $high){$mid intval(($low$high)/2 );if ($array[$mid] $k){return $mid;}elseif…

C++ 运算符重载规则

运算符重载是通过函数重载实现的&#xff0c;下面我们来介绍一下运算符重载需要遵循的规则。 1 并不是所有的运算符都可以重载。能够重载的运算符包括&#xff1a; - * / % ^ & | ~ ! < > - * / % ^ & | << >> << &…

C++ 重载数学运算符

四则运算符&#xff08;、-、、/、、-、、/&#xff09;和关系运算符&#xff08;>、<、<、>、、!&#xff09;都是数学运算符&#xff0c;它们在实际开发中非常常见&#xff0c;被重载的几率也很高&#xff0c;并且有着相似的重载格式。 复数能够进行完整的四则运…

php 隐藏 div 代码,在HTML里用CSS隐藏div的方法

我们知道&#xff0c;在制作网页的过程中常常会想隐藏一些内容&#xff0c;比如网站添加第三方统计显示的图标等&#xff0c;如何通过CSS隐藏&#xff0c;怎么让图片作为背景&#xff0c;但文字又不显示呢&#xff1f;这篇文章来给大家解读一下。一、普通隐藏网页内容CSS样式单…

php+错误+处理,PHP 错误处理手记!!!!!

header("content-type:text/html;charsetutf-8");/**定义errror_handler函数作为set_error_handler()的第一个参数回调;param int $error_level 错误级别param string $error_message 错误信息param string $file 错误所在文件param int $line 错误所在行*/function …