函数式接口
定义及特性内置函数式接口举例
Consumer 消费型接口Supplier 供给型接口Function
函数式接口 定义及特性只包含一个抽象方法的接口(有且仅有一个抽象方法,但是可以有多个非抽象方法的接口)
1. 函数式接口编程可以理解成java对OOF(面向函数编程)的支持
2. 之前所有可通过匿名实现类表示的,现在均可通过lamdba表达式来写
3. lambda是函数式接口的一个实例。
4. lambda本质上还是对象(函数式接口类型)
5. jdk提供丰富的函数式接口(java.util.function.*)
6. 函数式接口可以被隐式转换为 lambda 表达式。
7. 可以在接口上使用@FunctionalInterface 注解用于检查其是否为函数式接口。
接口定义:
void accept(T t);
示例代码:
import org.junit.Test;
import java.util.function.Consumer;
public class LambdaTest {
@Test
public void consumerTest() {
new LambdaTest().consumerTest("测试",System.out::println);
}
public void consumerTest(String printStr,Consumer consumer) {
consumer.accept(printStr);
}
}
Supplier接口定义:
T get();
示例代码:
@Test
public void supplierTest(){
System.out.println("获得int随机数:"+supplierTest(() -> new Random().nextInt()));
}
public Integer supplierTest(Supplier supplier) {
return supplier.get();
}
Function接口定义:
R apply(T t);
示例代码:
@Test
public void functionTest(){
System.out.println("转换结果:"+functionTest(1, s -> s.toString()));
}
public String functionTest(Integer testPatam, Function function) {
return function.apply(testPatam);
}
Predicate接口定义:
boolean test(T t);
示例代码:
@Test
public void predicateTest(){
System.out.println("判断结果:"+predicateTest(1, s -> s > 0));
}
public boolean predicateTest(Integer testPatam,Predicate predicate) {
return predicate.test(testPatam);
}
BiConsumerT、U俩入参,无需返回
接口定义:
void accept(T t, U u);BiFunction
T、U俩入参,返回R
接口定义:
R apply(T t, U u);BiPredicate
T、U俩入参,返回boolean
接口定义:
boolean test(T t, U u);UnaryOperator
T入参,返回T,对T进行一元运算
接口定义:
T apply(T t);BinaryOperator
T、T俩入参,返回T,对T进行二元运算
接口定义:
T apply(T t, T u);ToIntFunction
接口定义
//ToIntFunctionint applyAsInt(T value); // ToIntBiFunction int applyAsInt(T t, U u);
其他类似如:
ToDoubleFunction
ToLongFunction
int类型的消费型
接口定义
void accept(int value);
其他类似如:DoubleConsumer、LongConsumer、ObjDoubleConsumer
int类型的入参,R返回
接口定义
R apply(int value);
其他类似如:DoubleFunction
lambda使用之函数式接口
lambda语法及使用
java中的引用



