11.四大函数式接口

感谢秦疆老师的JUC并发编程视频,更多了解哔哩哔哩搜索【狂神说Java】。

本文内容源于秦疆老师的JUC并发编程视频教程。给狂神推荐,点赞吧!

函数式接口:只有一个方法的接口

  • lambada表达式 链式编程 函数式接口 Stream计算
  • 超级多FunctionalInterface
  • 简化编程模型,在新版本的框架底层大量应用!
  • foreach(消费者类的函数式接口)
@FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

Funcation函数式接口 : 有一个输入参数,有一个输出

传入参数T,返回参数R
在这里插入图片描述

  • Function 函数型接口, 有一个输入参数,有一个输出
  • 只要是函数型接口 可以用 lambda表达式简化
package function;

import java.util.function.Function;

public class FunctionTest1 {

    public static void main(String[] args) {
        Function function = new Function<String, String>() {
            @Override
            public String apply(String str) {
                return str;
            }
        };

        //简化lambda
        Function<String, String> lambdaFunction = (str) -> {
            return str;
        };

        System.out.println(function.apply("字符串"));
        System.out.println(lambdaFunction.apply("lambda字符串"));


    }
}



/******************输出结果********************

字符串
lambda字符串


****************************************/

Predicate 断定型接口:有一个输入参数,返回值只能是 布尔值!

在这里插入图片描述

  • 断定型接口:有一个输入参数,返回值只能是布尔值
package function;

import java.util.function.Predicate;

public class PredicateTest1 {

    public static void main(String[] args) {
        Predicate<String> predicate = new Predicate<String>() {
            @Override
            //判断字符串是否为空
            public boolean test(String s) {
                return s.isEmpty();
            }
        };

        //lambda表达式简化
        Predicate<String> lambdaPredicate = (str) -> {
            return str.isEmpty();
        };

        System.out.println(predicate.test(""));
        System.out.println(lambdaPredicate.test(" "));
    }
}



/******************输出结果********************

true
false


****************************************/


Consumer 消费型接口:只有输入,没有返回值!
在这里插入图片描述

  • Consumer 消费型接口:只有输入,没有返回值!
package function;

import java.util.function.Consumer;

public class ConsumerTest1 {

    public static void main(String[] args) {
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        Consumer<String> lambdaConsumer =(str)->{
            System.out.println(str);
        };

        consumer.accept("asd");
        lambdaConsumer.accept("asd");

    }
}



//输出
asd
asd

Supplier 供给型接口: 没有参数,只有返回值

在这里插入图片描述

  • Supplier 供给型接口: 没有参数,只有返回值
package function;

import java.util.function.Supplier;

public class SupplierTest1 {

    public static void main(String[] args) {
        Supplier supplier = new Supplier() {
            @Override
            public Integer get() {
                System.out.println("get()方法");
                return 200;
            }
        };

        Supplier lambdaSupplier = () -> {
            System.out.println("get()lambda方法");
            return 200;
        };

        System.out.println(supplier.get());
        System.out.println(lambdaSupplier.get());

    }
}

//输出
get()方法
200
get()lambda方法
200


posted @ 2020-06-06 23:25  我有满天星辰  阅读(2)  评论(0编辑  收藏  举报