- 函数式接口
- 一、函数式接口:
- 二、Lambda表达式:
- 三、常用函数式接口:
- 实现代码:
- 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等
- Java8提供@FunctionalInterface注解来定义函数式接口,若定义的接口不符合函数式的规范便会报错
- Java8中增加了java.util.function包,该包包含了常用的函数式接口
- Lambda 表达式是实例化函数式接口的重要方式,使用 Lambda 表达式可以使代码变的更加简洁紧凑
- lambda表达式:参数列表、箭头符号->和方法体组成,而方法体中可以是表达式,也可以是语句块
- 语法格式:(参数列表) -> { 方法体; } - 其中()、参数类型、{} 以及return关键字 可以省略
接口 | 声明 | 功能 |
---|---|---|
Runnable | void run() | 既没有参数又没有返回值 |
Consumer | void accept(T t) | 有参数没有返回值 |
Supplier | T get() | 没有参数有返回值 |
Function | R apply(T t) | 有参数有返回值 |
Predicate | boolean test(T t) | 判断指定的参数是否满足条件 |
Comparator | int compare(Object o1, Object o2) | 有多个参数与返回值 |
- Runnable
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("这是既没有参数又没有返回值的方法");
}
};
runnable.run();
/*Runnable runnable1 = () -> {System.out.println("Lambda+这是既没有参数又没有返回值的方法");};*/
// 当方法体中只有一个执行方法时候,{}可以省略
Runnable runnable1 = () -> System.out.println("Lambda + 这是既没有参数又没有返回值的方法");
runnable1.run();
- Consumer
Consumer consumer = new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o + "这是有参数没有返回值的方法");
}
};
consumer.accept("温馨提示");
/*Consumer consumer1 = (Object o) -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};*/
// Lambda有自动类型推断,可以省略参数类型
/*Consumer consumer1 = (o) -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};*/
// 当只有一个参数的时候可以去掉小括号
Consumer consumer1 = o -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};
consumer1.accept("友情提示");
- Supplier
Supplier supplier = new Supplier() {
@Override
public Object get() {
return "这是没参数有返回值方法";
}
};
System.out.println(supplier.get());
/*Supplier supplier1 = () -> {return "Lambda + 这是没参数有返回值方法";};*/
// Lambda中return关键字可以去掉
Supplier supplier1 = () -> "Lambda + 这是没参数有返回值方法";
System.out.println(supplier1.get());
- Function
Function function = new Function() {
@Override
public Object apply(Object o) {
return o + "这是有参数也有返回值方法";
}
};
System.out.println(function.apply("温馨提示"));
Function function1 = o -> o + "Lambda + 这是有参数也有返回值方法";
System.out.println(function1.apply("友情提示"));
- Predicate
Predicate predicate = new Predicate() {
@Override
public boolean test(Object o) {
if (o.equals("tb")) {
return true;
}
return false;
}
};
System.out.println(predicate.test("tb"));
Predicate predicate1 = (o) -> {if (o.equals("tb")) { return true; }return false;};
System.out.println(predicate1.test("tbb"));
- Comparator
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return Integer.parseInt(o1.toString()) + Integer.parseInt(o2.toString());
}
};
System.out.println(comparator.compare("1", "5"));
Comparator comparator1 = (o1, o2) -> {return Integer.parseInt(o1.toString()) + Integer.parseInt(o2.toString());};
System.out.println(comparator1.compare(6, 50));
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)