jdk1.8中提供了java.util.function包,里面提供了一大堆的接口。主要分为四类:
- 功能型的函数式接口
- 供给型的函数式接口
- 消费型的函数式接口
- 断言型的函数式接口
功能型接口
你输入一个参数,将参数处理后再进行输出。使用的格式是:Function<R,P> xx = ...
,使用apply
实现。
范例:使用功能型的借口(String.valueof())
public class InternalFuncInterface {
public static void main(String args[]){
Function<Integer,String> function = String::valueOf;
System.out.println(function.apply(300).length());
}
}
实际上,所有的內建函数式接口,都有一些小小的扩充。例如,如果确定参数值就是int类型,那么就可以使用
IntFunction
的接口来作为方法引用。例如:
public class InternalFuncInterface {
public static void main(String args[]){
IntFunction<String> function = String::valueOf;
System.out.println(function.apply(300).length());
}
}
消费型接口
只有参数,没有返回值的方法接口。(肉包子打狗)
使用的格式是:Consummer<P> consumer = ...
,使用accept
实现。
范例:(System.out.println())
public class InternalFuncInterface {
public static void main(String args[]){
Consumer<String> function = System.out::println;
function.accept("输出为消费型接口");
}
}
供给型接口
只有不断返回数据,不要求参数输入。
使用方法是:Supplier<String> function =...
,通过get
实现。
范例:大小写转换
public class InternalFuncInterface {
public static void main(String args[]){
Supplier<String> function = "hello"::toUpperCase;
System.out.println(function.get());
}
}
断言型接口
返回值为布尔型的函数式接口。
使用方法: Predicate<String> function =...
,使用test
实现。
范例:
public class InternalFuncInterface {
public static void main(String args[]){
Predicate<String> function = "##hello"::startsWith;
System.out.println(function.test("##"));
}
}