在java中构建lambda函数_JAVA中Lambda函数

1、Lambda函数怎么发展来的

最开始得写接口+类实现

抽象类:

如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。

因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。

因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。

接口:

如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改写为接口:interface。

然后改进了,写一个匿名类就行了

匿名类:

匿名类是不能有名字的类,它们不能被引用,只能在创建时用new语句来声明它们。

直接 new ,类的主体里面写实现方法,省得先定义一个接口,再定义一个类去实现

后来又改进了,写lambda函数就行了

2、常用的lambda接口,给定义好了,也可以自己定义接口

lambda接口

参数

返回值

Runnable

0

0

Consumer

1

0

Function

1

1

Supplier

0

1

3、样例代码

import java.util.List;

import java.util.function.Function;

import static java.util.Arrays.asList;

public class Test1 {

static void p(String s){

System.out.println(s);

}

public static void main(String[] args) {

//现用现写,不能复用

String s = guan(5, (a)-> ""+2*a);

p(s);

//现用现写,可以复用,把变量摘出来定义一下

Functionfun0 = (a)->""+3*a;

String s0 = guan(5, fun0);

p(s0);

//通过实例方法调用

Test1 obj = new Test1();

String s2 = guan(5, obj::fun2);

p(s2);

//通过类方法调用

String s3 = guan(5, Test1::fun3);

p(s3);

p("");

p("");

//summary, lambda可以当作数组元素

List> list = asList((a)->""+2*a, fun0, obj::fun2, Test1::fun3);

list.forEach(e->{

String s5= guan(5, e);

p(s5);

});

p("");

p("");

for(int i=0; ifun=list.get(i);

String s6= guan(5, fun);

p(s6);

}

}

//实例方法

String fun2(int a){

return ""+4*a;

}

//类方法

static String fun3(int a){

return ""+5*a;

}

//lambda函数的内置接口

static String guan(int a, Functionfun){

return fun.apply(a);

}

}

开始自己写接口。。。

import java.util.List;

import static java.util.Arrays.asList;

public class Test1 {

static void p(String s){

System.out.println(s);

}

public static void main(String[] args) {

//匿名类实现

String s="Guan";

guanguan0(s, new Interf0() {

public void sayhello(String s) {

p("Hello" + ", " + s);

}

});

p("");

p("");

//lambda实现

Interf inte = (ss)->p("Hello"+", "+ss);

Interf inte1 = (ss)->p("Meinv"+", "+ss);

Interf inte2 = (ss)->p("Cainv"+", "+ss);

guanguan("Guanguan", inte);

guanguan("Guanguan", inte1);

guanguan("Guanguan", inte2);

p("");

p("");

//lambda实现简洁版,可以省略用接口那一步

Interf inte3= (ss)->p("Hello"+", "+ss);//实现接口

inte.talktoguanguan("laowang");//用接口

//实现接口

Cmp cm00 = (a, b)-> {

if (a == b) {

return 0;

}

else if (a < b) {

return -1;

}

else return 1;

};

Cmp cm01 = (a, b)-> {

if (a == b) {

return 0;

}

else if (a > b) {

return -1;

}

else return 1;

};

Listlistint = asList(3, 5, 8, 7, 6);

sort(listint, cm00);

sort(listint, cm01);

}

//定义接口

@FunctionalInterface

interface Interf0{

void sayhello(String user);

}

//用接口

static void guanguan0(String s, Interf0 inte){

inte.sayhello(s);

}

//定义接口

@FunctionalInterface

interface Interf{

void talktoguanguan(String user);

}

//用接口

static void guanguan(String s, Interf inte){

inte.talktoguanguan(s);

}

//定义接口

@FunctionalInterface

interface Cmp{

int cmp(int a, int b);

}

//用接口

static void sort(Listarray, Cmp cm) {

for (int i = 0; i < array.size(); ++i) {

for (int j = i + 1; i < array.size(); ++j) {

if (cm.cmp(array.get(i), array.get(j)) < 0) {

int temp = array.get(i);

array.set(i, array.get(j));

array.set(j,temp);

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值