JDK 1.8 —— 函数式接口和Lambda表达式

前言

jdk 1.8之前,可以针对接口采取匿名内部类的方式,实例化出来。在jdk 1.8 及以后可以采取Lambda表达式实现。

只要是函数式接口,都能使用Lambda表达式简化代码。

四大函数式接口

参考开发文档中java.util.function

Function 函数式

其特性如源码所示:
在这里插入图片描述

1、由@FunctionalInterface修饰,表示该接口中有且仅有一个抽象方法。
2、传递两个参数,参数1表示传递参数类型参数2表示传出参数类型

代码案例:

package function;

import java.util.function.Function;

/**
 * Function 函数式接口;两个参数,参数一表示输入类型,参数二表示输出类型
 * @FunctionalInterface
 */
public class FuntionDemo1 {
    
    
    public static void main(String[] args) {
    
    

//        Function<String, String> function = new Function<String, String>() {
    
    
//            @Override
//            public String apply(String s) {
    
    
//                return s;
//            }
//        };

        //Function<String, String> function = (s)->{return s;};
        Function<String, String> function = s->{
    
    return s;};
        System.out.println(function.apply("999"));
    }
}

缩减为lambda表达式的根据:
在这里插入图片描述

移除图中高亮区域代码。

Predicate 断定性函数

其特性如源码中所示:
在这里插入图片描述

1、由@FunctionalInterface修饰,表示该接口中有且仅有一个抽象方法。
2、只有一个传递参数类型,返回类型只能是boolean类型。

package function;

import java.util.function.Predicate;

/**
 * 断定性接口:一个参数,输入类型;输出类型只能是boolean类型
 * @FunctionalInterface
 */
public class PredicatesDemo1 {
    
    
    public static void main(String[] args) {
    
    
//        Predicate<String> predicate = new Predicate<String>() {
    
    
//            @Override
//            public boolean test(String o) {
    
    
//                return o.isEmpty();
//            }
//        };
        Predicate<String> predicate = (str)->{
    
    return str.isEmpty();};
        System.out.println(predicate.test("6666"));
    }
}

Consumer 消费者函数

其特性如源码中所示:
在这里插入图片描述

1、由@FunctionalInterface修饰,表示该接口中有且仅有一个抽象方法。
2、只有一个传递参数类型,无返回类型。

package function;

import java.util.function.Consumer;

/**
 * 消费者接口 :只有输入类型,无返回值
 * @FunctionalInterface
 */
public class ConsumerDemo {
    
    
    public static void main(String[] args) {
    
    
//        Consumer<String> consumer = new Consumer<String>() {
    
    
//            @Override
//            public void accept(String s) {
    
    
//                System.out.println(s);
//            }
//        };
        Consumer<String> consumer = (s)->{
    
    
            System.out.println(s);
        };
        consumer.accept("666");
    }
}

Supplier 供给式函数

其特性如源码所示:
在这里插入图片描述

1、由@FunctionalInterface修饰,表示该接口中有且仅有一个抽象方法。
2、无传入类型,只有传出类型。

package function;

import java.util.function.Supplier;

/**
 * 供给型接口:无传递参数,只有返回结果
 *  @FunctionalInterface
 */
public class SupplierDemo {
    
    
    public static void main(String[] args) {
    
    
//        Supplier<String> supplier = new Supplier<String>(){
    
    
//            @Override
//            public String get() {
    
    
//                return "667788";
//            }
//        };
        Supplier<String> supplier = ()->{
    
    return "6666";};
        System.out.println(supplier.get());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38322527/article/details/115095793