四大函数式接口-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

目录
相关文章
|
消息中间件 存储 负载均衡
【Kafka】Kafka 分区
【4月更文挑战第5天】【Kafka】Kafka 分区
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
6月前
|
存储 SQL 监控
ClickHouse 应用剖析:设计理念、机制与实践
ClickHouse 是一款高性能的列式数据库管理系统,主要用于实时的大数据分析场景。它由俄罗斯 Yandex 公司开源于 2016 年,在网页日志分析、物联网监控、广告计费等领域有广泛应用。ClickHouse 通过列式存储、向量化执行和分布式架构,实现对海量数据的快速查询分析。本文将介绍 ClickHouse 的设计理念,以及在实际使用中如何处理数据删除更新、冷热数据分离等问题,并提供常见配置的调优建议和异常问题的处理方法。
734 14
ClickHouse 应用剖析:设计理念、机制与实践
|
9月前
|
IDE Java 开发工具
@Transactional 你真的用对了吗?
在日常开发中,`@Transactional`注解常用于声明式事务管理,但其原理和使用不当可能引发问题。本文通过一个实际场景探讨了自调用方法时事务不生效的问题,并分析了潜在风险:数据不一致。为解决此问题,提供了三种方案:1) 将方法移动到其他服务类;2) 使用`AopContext.currentProxy()`获取代理对象;3) 通过`ApplicationContext`获取Bean。最终建议尽量避免自调用事务操作,确保数据一致性。
334 6
|
11月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
483 3
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
902 1
|
机器学习/深度学习 算法 数据可视化
决策树算法介绍:原理与案例实现
决策树算法介绍:原理与案例实现
|
Java
Java的double值保留2位小数
【6月更文挑战第16天】Java的double值保留2位小数
530 0
【UI】 vue2 修改elementui 表格table 为空时暂无数据样式
【UI】 vue2 修改elementui 表格table 为空时暂无数据样式
706 1
Cannot open shared library libasound_module_conf_pulse.so
Cannot open shared library libasound_module_conf_pulse.so
848 0