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