对于方法的引用,严格来讲都需要定义一个接口,可是不管如何操作,实际上有可能操作的接口只有四种:在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中存在有以上四种功能型接口,所以一般很少会由用户去定义新的函数式接口。
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)
消费型接口:
功能型接口:引用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