标签:返回 对象 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
}
}
标签:返回 对象 rri 内部类 ddd col 去掉 匿名 语法
原文地址:https://www.cnblogs.com/wukejing/p/14142500.html