Java 8 中引进了新的一些函数式接口,函数式接口可以对现有的函数友好地支持 lambda。
先来看几个涉及概念:
1.方法引用:结合函数式接口使用
·引用静态方法:类名::静态方法名
·引用某个对象方法:实例化对象::普通方法
·引用某个特定类的方法:类名::普通方法
·引用构造方法:类名::new
2.可变参数:
方法名(数据类型...变量名){方法体}
其中...相当于一个数组,可变参数中可以已数组为参数,数据个数任意指定,可以为0个。
注意点:如果要传递多种类型的参数,可变参数要写在最后,例如:方法名(String str, char ch, int...data){},
一个方法只能设置一个可变参数。
常用的内建函数式接口:在java.util.function包中,有以下几个较为重要的接口:
1.功能型函数式接口:
@FunctionalInterface
public interface Function<T,R>{
public R apply(T t)
}
使用:
@Test
public void function() {
// 利用startsWith()方法判断是否以指定内容开头
Function<String, Boolean> fun = "**hello" :: startsWith;
System.out.println(fun.apply("**"));
}
结果:true
2.消费型函数式接口:只能进行数据的处理操作,没有返回值。
@FunctionalInterface
public interface Consumer<T>{
public void accept(T t)
}
使用:
@Test
public void consumer() {
// 输出
Consumer<String> consumer = System.out :: println;
consumer.accept("hello world");
}
结果:hello world
3.供给型函数式接口:
@FunctionalInterface
public interface Supplier<T>{
public T get();
}
使用:
@Test
public void supplier(){
// toLowerCase()方法的调用
Supplier<String> su = "HELLO WORLD" :: toLowerCase;
System.out.println(su.get());
}
结果:hello world
4.断言型函数式接口:进行判断处理
@FunctionalInterface
public interface Predicate<T>{
public boolean test(T t)
}
使用:
@Test
public void predicate(){
// equalsIgnoreCase()方法的调用
Predicate<String> pre = "Hello" :: equalsIgnoreCase;
System.out.println(pre.test("HELLO"));
}
结果:true