四大函数式接口-Predicate和consumer和supplier

简介: 四大函数式接口-Predicate和consumer和supplier

Predicate  断定型接口

首先观察源码 只有一个方法test.该方法只有一个输入参数,返回值是一个布尔值 这类函数式接口通常成为断定型接口:有一个输入参数,返回值只能是布尔值


image.png


package java.util.function;
import java.util.Objects;
/**
 * Represents a predicate (boolean-valued function) of one argument.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #test(Object)}.
 *
 * @param <T> the type of the input to the predicate
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}



true

false


使用lambda表达式对函数式接口进行简化


Predicate<String> predicate=(str)->{return str.isEmpty();};

System.out.println(predicate.test("")); //true


  1. consumer 消费型接口  和supplier 供给型接口是相反的


image.png

观察源码发现,只有一个accept方法,只有一个输入参数,没有返回值  和供给型接口是相反的


package java.util.function;
import java.util.Objects;
/**
 * Represents an operation that accepts a single input argument and returns no
 * result. Unlike most other functional interfaces, {@code Consumer} is expected
 * to operate via side-effects.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #accept(Object)}.
 *
 * @param <T> the type of the input to the operation
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Consumer<T> {
/**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
}


package com.wyh.function;
import java.util.function.Consumer;
/**
 * @program: JUC
 * @description: consumer消费型接口和supplier供给型接口
 * @author: 魏一鹤
 * @createDate: 2022-03-06 15:46
 **/
/**
 * Consumer函数式接口只有一个输入参数没有返回值
 *
 * consumer消费型接口和supplier供给型接口是互相对应的
**/
public class demo03 {
public static void main(String[] args){
        Consumer<String> consumer = new Consumer<String>() {
            @Override
public void accept(String o) {
            //打印字符串
                System.out.println(o);
            }
        };
        //调用方法 打印字符串
        consumer.accept("wyh"); //wyh
    }
}


wyh


使用lambda表达式对函数式接口进行简化





//lambda表达式简化代码
Consumer<String> consumer =(str)->{ System.out.println(str); };
consumer.accept("wyh"); //wyh


  1. supplier 供给型接口  consumer 消费型接口是相反的
首先观察源码 只有一个方法get,该方法只有没有参数,只有返回值 和消费型接口是相反的


image.png

@FunctionalInterface
public interface Supplier<T> {
/**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}



package com.wyh.function;
/**
 * @program: JUC
 * @description: consumer消费型接口和supplier供给型接口
 * @author: 魏一鹤
 * @createDate: 2022-03-06 15:58
 **/
import java.util.function.Supplier;
/**
 * supplier供给型接口 没有参数 只有返回值 和consumer消费型接口是相反的
 *
 **/
public class demo04 {
public static void main(String[] args){
        Supplier<Integer> supplier= new Supplier<Integer>() {
            @Override
public Integer get() {
//返回1024
                return 1024;
            }
        };
//打印输出 supplier的get方法返回值
        System.out.println(supplier.get()); //1024
    }
}


使用lambda表达式对函数式接口进行简化


//lambda表达式简化代码

Supplier<Integer> supplier=()->{return 1024;};

System.out.println(supplier.get()); //1024

目录
相关文章
|
存储 算法 Java
HashMap 之底层数据结构和扩容机制
HashMap 之底层数据结构和扩容机制
2019 1
|
3月前
|
SQL JavaScript API
Node.js 24 原生 SQLite 支持
Node.js 24 原生支持 SQLite(`node:sqlite`),无需第三方库即可高效操作数据库。提供同步 API,含 `DatabaseSync`、预编译语句及完整 CRUD 方法,适用于脚本、工具和轻量服务,零依赖、安全简洁。(239字)
484 1
|
存储 SQL 监控
ClickHouse 应用剖析:设计理念、机制与实践
ClickHouse 是一款高性能的列式数据库管理系统,主要用于实时的大数据分析场景。它由俄罗斯 Yandex 公司开源于 2016 年,在网页日志分析、物联网监控、广告计费等领域有广泛应用。ClickHouse 通过列式存储、向量化执行和分布式架构,实现对海量数据的快速查询分析。本文将介绍 ClickHouse 的设计理念,以及在实际使用中如何处理数据删除更新、冷热数据分离等问题,并提供常见配置的调优建议和异常问题的处理方法。
2246 14
ClickHouse 应用剖析:设计理念、机制与实践
|
存储 算法 安全
HashMap的实现原理,看这篇就够了
关注【mikechen的互联网架构】,10年+BAT架构经验分享。深入解析HashMap,涵盖数据结构、核心成员、哈希函数、冲突处理及性能优化等9大要点。欢迎交流探讨。
HashMap的实现原理,看这篇就够了
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
747 11
Cannot open shared library libasound_module_conf_pulse.so
Cannot open shared library libasound_module_conf_pulse.so
1011 0
element表单组件的trigger表单验证逻辑规则
校验元素trigger属性值应该怎么选择?
659 0
|
Java Nacos 网络架构
SpringCloud Gateway的使用 + Nacos动态路由
SpringCloud Gateway的使用 + Nacos动态路由
|
网络协议 应用服务中间件 nginx
docker镜像仓库
docker镜像仓库
9167 0
|
存储 缓存 监控
超级详细的 Maven 教程(基础+高级)(四)
为什么使用Maven这样的构建工具【why】
1103 0
超级详细的 Maven 教程(基础+高级)(四)