JAVA 内建式函数接口

来源:互联网 发布:麦道夫骗局知乎 编辑:程序博客网 时间:2024/06/03 16:42
     对于方法的引用,严格来讲都需要定义一个接口,可是不管如何操作,实际上有可能操作的接口只有四种:在JDK1.8里面提供了一个包:java.util.function,提供有以下四个核心接口:

      1、功能型接口(Function):public interface Function<T,R>{public R apply(T t);}
            |-此接口需要接收一个参数,并返回处理结果
      2、消费型接口(Consumer):public interface Consumer<T>{ public void accept(T t);}
            |-此接口只是负责接受数据(引用数据不需要返回值),并不返回处理结果。
      3、供给型接口(Supplier):public interface Supplier<T>{public T get();}
            |-此接口不接收参数,但是可以返回结果。
      4、断言型接口(Predicate):public interface Predicate<T>{public boolean test(T t);}
            |-此接口进行判断操作使用。


      因为在JDK1.8中存在有以上四种功能型接口,所以一般很少会由用户去定义新的函数式接口。

     因为是在java.util.function包内定义的,所以使用的时候需要进行导包操作。
     
      功能型接口:引用String类的startsWith()方法为例:public boolean startsWith(String str)
import java.util.function.Function ;//导包public class Demo{public static void main (String [] args){//实例化对象引用String类的startsWith()方法Function<String , Boolean> fun = "##Hello" :: startsWith ;//判断字符串是否以“##”开头System.out.println(fun.apply("##")) ;}}//运行结果:true

      消费型接口:
import java.util.function.Consumer;//导包//定义一个类,里面定义一个有参数但是没有返回值的方法class MyDemo{public void print(String str){System.out.println(str) ;}}public class Demo{public static void main (String [] args){Consumer<String> cons = new MyDemo() :: print ; //引用MyDemo类的print()方法cons.accept("Hello World !") ;}}//执行结果:Hello World !

      供给型接口: 引用String类的toUpperCase()方法为例:public String toUpperCase() ;
import java.util.function.Supplier;//导包public class Demo{public static void main (String [] args){Supplier<String> sup = "hello" :: toUpperCase ; //通过实例化对象引用String类的toUpperCase()方法System.out.println(sup.get()) ;}}//执行结果:HELLO
      断言型接口:引用String类的equalsIgnoreCase()方法为例:public boolean equalsIgnoreCase(String str) ;
import java.util.function.Predicate;//导包public class Demo{public static void main (String [] args){Predicate<String> pre = "hello" :: equalsIgnoreCase ; //通过实例化对象引用String类的equalsIgnoreCase()方法System.out.println(pre.test("Hello")) ;}}//执行结果:true



原创粉丝点击