内建函数式接口
一、函数式接口分类
Lambda语法实际上简化为了方法引用,但是Lambda核心在于函数式接口,而函数式接口的核心只有一个方法。
在函数式编程里面只需要有四类接口(Java.util,function):
- 功能性函数接口:
public interface Function<T,R> {public R apply(T t);};
- 供给型函数式接口:
Interface Supplier {public T get();}
- 消费型函数式接口:
public interface Consumer {public void accept(T t);};;
- 断言型函数式接口:
public interface Predicate {Boolean test(T t);}
- 函数式接口范例
范例:使用功能型接口(String.valueof())
功能型指的是输入一个数据,将数据处理后再进行输出。实际上所有的函数式接口里面都会有一些小的扩展,
例如:
如果现在确定操作的数据是int,则可以使用IntFunction接口。
package cn.mldn.demo;
import java.util. function.Function;
public class TestDemo {
public static void main(String[] args) {
Function<Integer, String>fun = string: :valueof;
System. out .println(fun. apply(1000));
}
}
范例:扩展的Function接口
package cn.mldn.demo;
import java.util. function.Function;
public class TestDemo {
public static void main(String[] args) {
Function<Integer, String>fun = string: :valueof;
System. out .println(fun. apply(1000));
}
}
范例:消费型接口(System.out.println)
package cn . mldn. demo;
import java.util. function.Consumer;
public class TestDemo {
public static void main(String[] args) {
Consumer<String> cons = System.out :: println ;
cons. accept("Hello World !");
}
}
范例:供给型接口(“hello”.toUpperCase())
package cn.mldn.demo;
import java.util.function.Supplier;
public class TestDemo {
public static void main(String[] args) {
Supplier<String> sup = "hello":: toUpperCase ;
System.out.println(sup. get());
}
}
范例:断言型函数接口(isEmpty)
package cn.mldn.demo ;
import java . util . function.Predicate;
public class TestDemo {
public static void main(String[] args) {
Predicate<String> pre =" ##hello"::startswith ;
System.out. println(pre.test("##"));
}
}
如果要进行复杂的Lambda运算,就需要利用这类的函数式接口进行操作