码迷,mamicode.com
首页 > 其他好文 > 详细

lambda表达式

时间:2020-12-21 11:41:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:返回   对象   rri   内部类   ddd   col   去掉   匿名   语法   

函数式接口

只有一个抽象方法的接口就是函数式接口,传统使用接口的方式是定义一个实现类,然后创建对象,或者使用匿名内部类创建对象。

 

Lambda表达式

而lambda表达式可以替代匿名内部类创建对象。

lambda表达式可以当成一个接口的实现类对象。

它是一个语法糖,可以看成是匿名内部类的简写方式,减少代码量。

 

只有函数式接口(只有一个抽象方法的接口)才可以用lambda表达式创建对象

如:

public class TestJava {
public static void main(String[] args) {
// 传统方式
InterfaceA object1 = new InterfaceA() {
@Override
public int f1(int a, int b) {
int c = a + b;
int d = a * b;
return c + d;
}
};
System.out.println(object1.f1(1, 2)); // 输出5

// 利用lambda表达式创建接口对象。
InterfaceA object2 = (int a, int b) -> {
int c = a + b;
int d = a * b;
return c + d;
};
System.out.println(object2.f1(3, 4)); // 输出19
}

// 定义接口
interface InterfaceA {
int f1(int a, int b);
}
}

 

 

lamba表达式分为3部分:参数声明、->符号、方法体,类似于接口的方法定义。

如:(int a, int b) -> a + b

(int a, int b):接口方法的参数声明跟接口方法的参数对应,可以简写为(a,b),如果是void方法,写成(),

如果只有一个参数,则可以去掉括号,可以写成(int a)、(a)、a都可以。

 

->:是固定符号

 

{
int c = a + b;
int d = a * b;
return c + d;
};
:是方法体。

如果只有一条语句,则可以省略大括号,并且可以省略return,返回值就是表达式运算结果。

如:

(int a, int b) -> a + b;

 

 

常用的函数式接口

只有一个抽象方法的接口就是函数式接口,如:Runnable、Comparable等,java8中加入了一类函数式接口,都在java.util.function包下:

 

 

技术图片

 

 

示例:Predicate的使用:

Predicate有一个test方法,可以在lambda表达式中去定义它的判断规则:

public class TestJava {
public static void main(String[] args) {
Predicate<Integer> p1 = a -> a > 2;
System.out.println(p1.test(1)); // false
System.out.println(p1.test(3)); // true

Predicate<String> p2 = a -> a != null && a.startsWith("abc");
System.out.println(p2.test("defccc")); // false
System.out.println(p2.test("abcddd")); // true
}
}


 

lambda表达式

标签:返回   对象   rri   内部类   ddd   col   去掉   匿名   语法   

原文地址:https://www.cnblogs.com/wukejing/p/14142500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!