函数式接口的匿名内部类与Lambda表达式的实现
Posted 技术很low的瓜贼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式接口的匿名内部类与Lambda表达式的实现相关的知识,希望对你有一定的参考价值。
文章目录
函数式接口
一、函数式接口:
- 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等
- Java8提供@FunctionalInterface注解来定义函数式接口,若定义的接口不符合函数式的规范便会报错
- Java8中增加了java.util.function包,该包包含了常用的函数式接口
二、Lambda表达式:
- Lambda 表达式是实例化函数式接口的重要方式,使用 Lambda 表达式可以使代码变的更加简洁紧凑
- lambda表达式:参数列表、箭头符号->和方法体组成,而方法体中可以是表达式,也可以是语句块
- 语法格式:(参数列表) -> 方法体; - 其中()、参数类型、 以及return关键字 可以省略
三、常用函数式接口:
接口 | 声明 | 功能 |
---|---|---|
Runnable | void run() | 既没有参数又没有返回值 |
Consumer | void accept(T t) | 有参数没有返回值 |
Supplier | T get() | 没有参数有返回值 |
Function<T,R> | 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));
以上是关于函数式接口的匿名内部类与Lambda表达式的实现的主要内容,如果未能解决你的问题,请参考以下文章