java lambda用法(java中lambda表达式做什么的),本文通过数据整理汇集了java lambda用法(java中lambda表达式做什么的)相关信息,下面一起看看。

Java8发布已经有一段时间了,这个版本的变化还是蛮大的。很多人把这个变化和Java5的升级相提并论。Java8最重要的新特性之一是lambda expression,它允许我们将行为传递给函数。想想吧。在Java8之前,我们希望将行为传递给函数,唯一的选择是匿名内部类。Java8发布后,lambda表达式将大量取代匿名内部类的使用,简化代码,突出包含真正逻辑代码的原始匿名内部类的最重要部分。尤其是做数据的同学,当他们习惯使用scala这样的函数式编程语言时,体会会更加深刻。现在让我们看看用Java8编写lambda表达式的一些常用方法。

lambda体中调用方法的参数列表和返回值类型要和函数接口中抽象方法的一致。

首先,替换匿名内部类

Lambda表达式最常用于替换匿名内部类,实现Runnable接口是匿名内部类的经典例子。Lambda表达式相当强大,可以用()-!

包装OSChina。;导入org . JUnit . test;导入Java . util . comparator;导入Java . util . function . consumer;导入Java . util . function . function;导入Java . util . function . predicate;导入Java . util . function . supplier;class test1 { public static void main(string[]args){ runnable runnable=new runnable(){ @ override public void run(){ system . out . println(' normal,thread startup ');} };runnable . run();test2();test3();test4();test 5();}//无参数,无返回值public static void test 2(){//"--"左边只有一个括号,表示无参数,右边是Lambda body(相当于在匿名内部类中实现方法,(也就是一个可用的接口实现类。))runnable runnable=()-system . out . println(' lambda expression,thread start ');runnable . run();}//有一个参数,没有公共静态void test3() {//这个e表示实现接口的方法的参数,consumer string consumer=e-system . out . println(' lambda expression,' e);Consumer.accept('传入参数');}//有两个以上的参数,返回值,Lambda体中有多个语句:public static void test 4(){//Lambda体中有多个语句。记得用大括号把比较器整数com=(x,y)-{system.out.println('函数接口')括起来;return integer 0.742162178000962 . com 0.86798100086891 pare(x,y);};int compare=com 0.7442162178000962 . com 0.863798100086891 pare(100,244);System.out.println('有两个以上的参数和一个返回值,' compare));}//如果Lambda体只有一条语句,可以省略回车和花括号,不用写public static void test 5(){//comparator com=(x,y)-整数0.7800.962.com(100,244);System.out.println('如果Lambda体只有一条语句,return和花括号都可以省略,'整数0.7800.0962.com 0.100,244));}}

二、Java8四个内置功能接口

如果用lambda自己写接口太麻烦,所以Java本身提供了一些接口:

1.消费者接口:void accept(t t);

//有一个参数,没有返回值public static void test3() {//这个e表示实现的接口的方法的参数,consumer string consumer=e-system . out . println(' lambda expression,' e);Consumer.accept('传入参数');} 2.供应商供货接口:T get();

包装OSChina .;导入Java。util。ArrayList导入Java。util。功能。供应商;公共类test 2 { public static void main(String[]args){ ArrayListInteger RES=getNumList(10,()-(int)(math。random()* 100));系统。出去。println(RES);} public static ArrayListInteger getNumList(int num,supplier integer sup){ ArrayListInteger list=new ArrayList();for(int I=0;i numI){ Integer e=sup。get();列表。添加(e);}返回列表;}}

3、功能函数式接口:R apply(T T);

包装OSChina .;导入Java。util。功能。功能;public class test 2 { public static void main(String[]args){ String newStr=str handler(' ABC ',(str)-str。toupper case());系统。出去。println(newStr);newStr=strHandler(' abc ',(str)-str。trim());系统。出去。println(newStr);}公共静态字符串String handler(String str,FunctionString,String fun){ return fun。应用(str);}}

4、谓词断言式接口:布尔测试(T T);

判断一些字符串数组判断长度2的字符串:

包装OSChina .;导入Java。util。ArrayList导入Java。util。数组;导入Java。util。列表;导入Java。util。功能。谓词;公共类test 2 { public static void main(String[]args){ ListString list=arrays。aslist(' hello ','江疏影、‘lambda’、‘www’、‘ok’、‘q’);ListString ret=filterStr(list,(str)-str。长度()2);系统。出去。println(ret);} public static ListString filterStr(ListString list,谓词testring pre){ arrayList string arrayList=new arrayList();for(String str:list){ if(pre。test(str)){ ArrayList。add(str);} }返回数组列表}}

三、方法引用与构造器引用

要求:实现抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!

方法引用:使用操作符":"将类与方法分隔开来。

对象:实例方法名类:静态方法名类:实例方法名

举个例子:

public static void test 9(){ comparator integer comparator=(x,y)-整数0.7442162178000962。com 0.86798100086891 pare(x,y);比较器Integer比较器1=Integer:compare;int compare=比较器0.7442162178000962。com 0.86798100086891 pare(1,2);int compare 1=比较器10.7442162178000962。com 0.7798100086891 pare(1,2);System.out.println('compare:'比较');系统。出去。println('比较1:'比较1 ');}

四、表达式的一些常见用法

1、使用希腊字母的第11个表达式对集合进行迭代

包装OSChina .;导入Java。util。数组;导入Java。util。列表;public class Test3 { public static void main(String[]args){ ListString list=arrays。aslist(' Java ',' c# ',' JavaScript ');//Java 8之前for(String str:list){ system。出去。println(' Java 8之前,' str);java8 list.forEach之后(x系统。出去。println(' Java 8后,' x));}}

2、用希腊字母的第11个表达式实现地图

地图函数可以说是函数式编程里最重要的一个方法了地图。的作用是将一个对象变换为另外一个。在我们的例子中,就是通过地图方法将费用增加了0,05倍的大小然后输出。

包装OSChina .;导入Java。util。数组;导入Java。util。列表;公共类test 3 { public static void main(String[]args){ list double list=arrays。aslist(10.0,20.0,30.0);list.stream().地图(x-x x*0.05).forEach(x系统。出去。println(x));}}

3、用希腊字母的第11个表达式实现地图与减少

既然提到了地图,又怎能不提到减少.减少与地图一样,也是函数式编程里最重要的几个方法之一地图的作用是将一个对象变为另外一个,而减少实现的则是将所有值合并为一个,请看:

包装OSChina .;导入Java。util。数组;导入Java。util。列表;public class Test3 { public static void main(String[]args){//Java 8 list double cost=arrays之前。aslist(10.0,20.0,30.0);double sum=0;for(double each:cost){ each=each * 0.05;总和=每个;}系统。出去。println(' Java 8之前,' sum);//Java 8 list双列表=数组。阿斯列表(10.0,20.0,30.0)之后;double sum2=list.stream().地图(x-x x*0.05).减少((sum1,x)-sum1 x).get();系统。出去。println(' Java 8后,‘和2);}}

相信用地图减少表达式的写法高出不止一个水平.

4、过滤操作

过滤器也是我们经常使用的一个操作。在操作集合的时候,经常需要从原始的集合中过滤掉一部分元素。

包装OSChina .;导入Java。util。数组;导入Java。util。列表;导入Java。util。溪流。收藏家;public class Test3 { public static void main(String[]args){ list double cost=arrays。as列表(10.0,20.0,30.0,40.0);列出双重过滤成本=成本。流().过滤器(x - x 25.0).收藏(收藏者。to list());过滤成本。foreach(x系统。出去。println(x));}}

5、与函数式接口述语配合

除了在语言层面支持函数式编程风格,Java 8也添加了一个包,叫做java.util。函数.它包含了很多类,用来支持Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)的函数式编程。其中一个便是谓词,使用java.util.function谓词函数式接口以及希腊字母的第11个表达式,可以向应用程序界面方法添加逻辑,用更少的代码支持更多的动态行为谓词接口非常适用于做过滤。

包装OSChina .;导入Java。郎。反思。数组;导入Java。util。数组;导入Java。util。列表;导入Java。util。功能。谓词;public class test 4 { public static void filter test(list string languages,predicate string condition){ languages。流().过滤器(x - condition.test(x)).forEach(x系统。出去。println(x ' '));} public static void main(String[]args){ list String languages=arrays。aslist(' Java ',' Python ',' scala ',' Shell ',' R ');filterTest(languages,x-x .以(' J ')开头);//Java filterTest(languages,x-x .以(' a '))结尾;//Java,scala filterTest(languages,x-true);//Java,Python,scala,Shell,R filterTest(语言,x-false);//filterTest(languages,x-x . length()4);//Python,scala,Shell,}}

江疏影讲Java@目录

更多java lambda用法(java中lambda表达式做什么的)相关信息请关注本站,本文仅仅做为展示!