上一篇:教你如何引用方法 | 带你学《Java面向对象编程》之八十七
【本节目标】
通过阅读本节内容,你将了解Java中提供的功能性、消费型、供给型、断言型函数式接口的相关定义,并学会其使用方法。
内建函数式接口
在JDK1.8之中提供有Lambda表达式也提供有方法引用,但是会发现现在由开发者自己定义函数式接口,往往都需要使用“@FunctionalInterface”注解来大量声明,于是很多的情况下如果为了方便则可以直接引用系统中的提供的函数式的接口。
在系统之中专门提供有一个java.util.function的开发包,里面可以直接使用函数式接口,在这个包下面一共有如下的几个核心接口供使用:
1、功能性函数式接口:
在String类中有一个方法,判断是否以指定的字符串开头:
public boolean startsWith(String str);
接口定义:
@FunctionalInterface
public interface Function<T,R>{
public R apply(T t) ;
}
接口使用:
import java.util.function.* ;
public class JavaDemo{
public static void main(String args[]) {
Function<String ,Boolean> fun = "**Hello" :: startsWith ;
System.out.println(fun.apply("**")) ; //true
}
}
2、消费型函数式接口:只能够进行数据的处理操作而没有任何返回。
在进行系统输出的时候使用的是:
System.out.println() ;
接口定义:
@FunctionalInterface
public interface Consumer<T> {
public void accept(T t) ;
}
接口使用:
import java.util.function.* ;
public class JavaDemo{
public static void main(String args[]) {
Consumer<String> fun =System.out :: println ;
con.accept("www.mldn.cn") ; // www.mldn.cn
}
}
3、供给型函数式接口:
在String类中提供有转小写方法,这个方法没有接收参数,但是有返回值。
方法:
public String toLowerCase() ;
接口定义:
@FunctionalInterface
public interface Supplier<T> {
public T get() ;
}
接口使用:
import java.util.function.* ;
public class JavaDemo{
public static void main(String args[]) {
Supplier<String> sup ="www.MLDNJAVA.cn" :: toLowerCase ;
System.out.println(sup.get()) ; //www.mldnjava.cn
}
}
4、断言型函数式接口:进行判断处理
在String类有一个equalsIgnoreCase()方法
接口定义:
@FunctionalInterface
public interface Predicate<T> {
public boolean test(T t) ;
}
接口使用:
import java.util.function.* ;
public class JavaDemo{
public static void main(String args[]) {
Predicate<String> pre ="mldn" :: equalsIgnoreCase ;
System.out.println(pre.test("MLDN")) ; //true
}
}
以后对于实际的项目开发之中,如果JDK本身提供的函数式接口可以被开发者所使用,那么就没有必要进行重新定义了。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学