java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 Java 8 新特性 内建函数式接口详解的相关资料, 这里主要介绍 4 个基本函数式接口, 需要的朋友可以参考下
Java 8 新特性内建函数式接口
在之前的一片博文 Lambda 表达式, 提到过 Java 8 提供的函数式接口在此文中, 将介绍一下 Java 8 四个最基本的函数式接口
对于方法的引用, 严格来讲都需要定义一个接口不管我们如何操作实际上有可能操作的接口只有四种
Java 8 提供了函数式接口包 java.util.function.*, 在该包下有许多 Java 8 内建的函数式接口不过基本上分为四种基本的:
功能型接口 (Function)
将 T 作为输入, 返回 R 作为输出, 他还包含了和其他函数组合的默认方法
- @FunctionalInterface
- public interface Function<T, R> {
- R apply(T t);
- }
示例代码
- public static void main(String[] args) {
- // 这里用到了 Java8 的 方法引用, 功能型函数式接口!
- Function<String,Boolean> function = "Hello Java" :: endsWith;
- System.out.println(function.apply("Java"));
- }
消费型接口 (Consumer)
将 T 作为输入, 不返回任何内容, 表示在单个参数上的操作
- @FunctionalInterface
- public interface Consumer<T> {
- void accept(T t);
- }
示例代码
- class TestDemo{
- // 此方法没有返回值, 但是有输入参数
- public void fun(String str){
- System.out.println(str);
- }
- }
- public class TestFunctional {
- public static void main(String[] args) {
- TestDemo demo = new TestDemo();
- // 消费型接口, 只有输入参数, 没有输出参数
- Consumer<String> consumer = demo :: fun;
- consumer.accept("");
- }
- }
供应型接口 (Supplier)
没有输入参数, 只有 T 返回输出
- @FunctionalInterface
- public interface Supplier<T> {
- T get();
- }
示例代码
- public class TestFunctional {
- public static void main(String[] args) {
- // 供应商类型接口, 只有输出参数, 没有输入参数!
- Supplier<String> supplier = "java 8" :: toUpperCase;
- System.out.println(supplier.get());
- }
- }
断言型接口 (Predicate)
将 T 作为输入, 返回一个布尔值作为输出, 该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(与或非)
- @FunctionalInterface
- public interface Predicate<T> {
- boolean test(T t);
- }
示例代码
- public class TestFunctional {
- public static void main(String[] args) {
- // 断言类型接口有输入参数, 输出参数为布尔值
- Predicate<String> predicate = "Android" :: equalsIgnoreCase;
- System.out.println(predicate.test("android"));
- }
- }
所以在 Java 8 中由于存在有以上的四个功能型接口, 所以一般很少会由用户去定义新的函数式接口!
来源: http://www.phperz.com/article/18/0222/359271.html