内建函数式接口
对于可能出现的函数式接口的方法最多只有4类:有参数有返回值、有参数无返回值、无参数有返回值、判断真假。
为了简化开发者的定义以及实现操作的统一,Java提供了一个新的开发包:java.util.function,并且在这个包中提供了以下4个核心的函数式接口。
1.功能型接口(Function)
接口定义如下:
@FunctionalInterface
public interface Function<T,R>{
public R apply(T t);
}
主要作用:此接口需要接收一个参数,并且返回一个处理结果。
例:使用功能型函数式接口。本程序将利用Function接口引用,String类“public boolean startsWith(String str)”方法
package Project.Study.BuiltInFunctionalInterface;
import java.util.function.*;
public class Test1 {
public static void main(String args[]){
Function<String,Boolean>fun="Hello World"::startsWith;
//public boolean startsWith(String prefix, int toffset)方法
//startsWith() 方法用于检测字符串是否以指定的前缀开始。
System.out.println(fun.apply("H"));
System.out.println(fun.apply("e"));
System.out.println(fun.apply("ll"));
}
}
//结果:
//true
//false
//false
2.消费接口(Consumer)
接口定义如下:
@FunctionalInterface
public interface Consumer<T>{
public void accept(T t);
}
主要作用:此接口只是负责接收数据(引用数据时不需要返回),并且不返回处理结果。
例:使用消费型接口。
package Project.Study.BuiltInFunctionalInterface;
import java.util.function.Consumer;
public class Test2 {
public static void main(String args[]){
Consumer<String>cons=System.out::println;
cons.accept("Hello World");
}
}
//结果
//Hello World
本程序利用消费性接口接收了,System.out.println()方法的引用,此方法定义中需要接收一个String型数据,但是不会返回任何结果。
3.供给型接口(Supplier)
接口定义如下:
@FunctionalInterface
public interface Supplier<T>{
public T get();
}
主要作用:此接口不接收参数,但是可以返回结果。
例:供给型接口。本程序使用String类的toUpperCase()方法(public String toUpperCase())。
package Project.Study.BuiltInFunctionalInterface;
import java.util.function.Supplier;
public class Test3 {
public static void main(String args[]){
Supplier<String>sup="Hello World"::toUpperCase;
//toUpperCase的意思是将所有的英文字符转换为大写字母,只对英文字母有效,对除了A~Z和a~z的其余字符无任何效果
System.out.println(sup.get());,
}
}
//结果
//HELLO WORLD
4.断言型接口(Predicate)
接口定义如下:
@FunctionalInterface
public interface Predicate<T,R>{
public boolean test(T t);
}
主要作用:进行判断使用
例:断言型接口。本程序将引用String类中的equalsIgnoreCase()方法(public boolean equalsIgnoreCase(String str))。
package Project.Study.BuiltInFunctionalInterface;
import java.util.function.Predicate;
public class Test4 {
public static void main(String args[]){
Predicate<String>pre="Hello World"::equalsIgnoreCase;
//执行忽略大小写的比较,当比较两个字符串时,它会认为A-Z和a-z是一样的
System.out.println(pre.test("HELLO WORLD"));
}
}
//结果:
//true