Java 中常用内置接口函数

news2024/9/22 4:38:51

        在 Java 8 及以后的版本中,引入了许多函数式编程的特性,其中最重要的就是内置的函数式接口。这些接口使得编写更简洁、可读性更强的代码成为可能。今天我将介绍四个常用的内置接口:PredicateFunctionConsumer 和 Supplier,并提供示例代码以帮助理解其用法。

1. Supplier 接口

  Supplier<T> 是一个供给型接口,它没有输入参数,但会返回一个类型为 T 的对象。常用于需要延迟计算或生成对象的场景。

源码

示例

package com.school;

import java.util.Arrays;
import java.util.function.Supplier;

/**
 * 文件名: null.java
 * 作者: 20526
 * 创建时间: 2024/9/8 14:08
 * 描述:Supplier接口
 */
public class SupplierDemo {

    public static void main(String[] args) {
        testSupplier(()->{
            int[] arr = {1, 2, 20, 4, 9};
            Arrays.sort(arr);
            return arr[arr.length - 1];
        });

    }

    /**
     * 供给型接口Supplier<T>的使用
     * 传入一个泛型参数T,返回类型为T的对象
     */
    public static void testSupplier(Supplier<Integer> supplier) {
        int max = supplier.get();

        System.out.println("最大值: " + max);

    }
}

2. Consumer 接口

  Consumer<T> 是一个消费型接口,它接受一个类型为 T 的输入参数,但没有返回值。常用于执行某些操作,例如打印或处理数据。

源码

示例

package com.school;

import java.util.function.Consumer;

/**
 * 文件名: null.java
 * 作者: 20526
 * 创建时间: 2024/9/8 14:14
 * 描述:Consumer接口
 */
public class ConsumerDemo {
    public static void main(String[] args) {

        //Lambda表达式作省略写法
        testconsume( s-> System.out.println(s.toUpperCase()));

        // 使用匿名内部类实现Consumer接口
        testconsume(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s.toUpperCase());
            }
        });
    }

    /**
     * 消费型接口Consumer
     * 传入一个泛型T,没有返回值,用于消费数据
     */

    public static void testconsume(Consumer<String> consumer) {
        System.out.println("a a a");
        consumer.accept("Hello World");
    }
}

3. Function 接口

  Function<T, R> 是一个函数型接口,它接受一个类型为 T 的输入参数,并返回一个类型为 R 的结果。常用于转换数据类型或执行某些计算。

源码

示例

package com.school;

import java.util.function.Function;

/**
 * 文件名: null.java
 * 作者: 20526
 * 创建时间: 2024/9/8 14:30
 * 描述:Function接口
 */
public class FunctionDemo {

    public static void main(String[] args) {
          getNumber( s -> Integer.parseInt(s));
    }

    public static void getNumber(Function<String, Integer> function) {
        Integer i = function.apply("123");
        System.out.println("i = "+i);
    }

}

4. Predicate 接口

  Predicate<T> 是一个断言型接口,它接受一个类型为 T 的输入参数,并返回一个布尔值。常用于过滤或测试条件。

源码

示例

package com.school;

import java.util.function.Predicate;

/**
 * 文件名: PredicateDemo.java
 * 作者: 20526
 * 创建时间: 2024/9/8 14:45
 * 描述: Predicate接口
 */
public class PredicateDemo {
    public static void main(String[] args) {
        testPredicate(s -> s.length() > 5);
    }

    public static void testPredicate(Predicate<String> predicate) {
        String testString = "HelloWorld";
        boolean result = predicate.test(testString);
        System.out.println("字符串长度大于5: " + result);
    }
}

总结

        Java 的内置函数式接口提供了强大的功能,使得开发者能够以更简洁的方式编写代码。通过 SupplierConsumerFunction 和 Predicate,我们可以轻松地实现延迟计算、数据处理、类型转换和条件判断。这些接口在 Java 8 的流式 API 中得到了广泛应用,极大地提升了代码的可读性和可维护性。希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客 这节就是真正的存储数据了 理清一下思路&am…

SprinBoot+Vue漫画天堂网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

0x06 记录一次挖src的经历(xss漏洞)

漏洞平台&#xff1a;补天 - 企业和白帽子共赢的漏洞响应平台&#xff0c;帮助企业建立SRC 个人总结的挖洞流程&#xff1a; 1&#xff09;先用工具信息收集一波 我这里先用灯塔收集一下目标资产 2&#xff09;然后用漏洞扫描工具扫描一波 我这里用Acunetix进行扫描 因为工具…

驱动(RK3588S)第九课时:多节点驱动与函数接口

目录 一、多节点概念1、所用到的结构体说明2、函数接口主要是read和write函数2.1、把应用层的数据拷贝给底层2.2、把应用层的数据拷贝给底层 3、应用层的read和write函数4、底层的read和write函数二、ioctl控制命令接口1、概念2、函数介绍应用层和驱动层 三、代码与现象1.编写L…

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师&#xff0c;爱吃土豆。如有需要技术交流或者需要方案帮助、需求&#xff1a;以下为联系方式—V 方案1&#xff1a;通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通…

使用 nuxi preview 命令预览 Nuxt 应用

title: 使用 nuxi preview 命令预览 Nuxt 应用 date: 2024/9/8 updated: 2024/9/8 author: cmdragon excerpt: 摘要:本文介绍了如何使用nuxi preview命令预览Nuxt.js应用,包括安装和准备环境、启动预览服务器的步骤,以及如何指定根目录和使用自定义.env文件等高级用法。通…

【H2O2|全栈】关于HTML(5)HTML基础(四)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类&#xff08;四&#xff09; 本文中的标签在什么位置中使用&#xff1f; 表单&#xff08;一&#xff09; 表单标签 输入域标签 预告和回顾 后话 前言 本系列博客将分享HTML相关知识点。 这一期博客&…

使用 DBeaver 创建 MySQL 数据库

文章目录 创建数据库创建用户 创建数据库 1.在【数据库】上点右键&#xff0c;然后选择【新建 数据库】 2.输入 数据库名&#xff0c;点击确定 这样&#xff0c;数据库就创建好了 创建用户 1.在【用户】上点右键&#xff0c;然后选择【新建 用户】 在属性这里&#xff0c;输入…

基于yolov8的血细胞检测计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的血细胞检测与计数系统是一种利用深度学习技术&#xff0c;特别是YOLOv8目标检测算法&#xff0c;实现高效、准确血细胞识别的系统。该系统能够自动识别并计数图像或视频中的血细胞&#xff0c;包括红细胞、白细胞和血小板等&#xff0c;为医疗诊断提…

揭开面纱--机器学习

一、人工智能三大概念 1.1 AI、ML、DL 1.1.1 什么是人工智能? AI&#xff1a;Artificial Intelligence 人工智能 AI is the field that studies the synthesis and analysis of computational agents that act intelligently AI is to use computers to analog and instead…

v0.dev快速开发

探索v0.dev&#xff1a;次世代开发者之利器 今之技艺日新月异&#xff0c;开发者之工具亦随之进步不辍。v0.dev者&#xff0c;新兴之开发者利器也&#xff0c;迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势&#xff0c;助汝速速上手&#xff0c;提升开发之…

WSL 下的 CentOS 装 Docker

WSL 下的 CentOS 装 Docker 卸载旧版本安装前的准备工作1. 安装 yum-utils2. 添加阿里云的 yum 镜像仓库3. 快速生成 Yum 缓存 安装Docker启动docker运行 hello-world卸载 Docker 引擎参考资料 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ d…

论文阅读_检索增强生成 RAG 综述

英文名称: Retrieval-Augmented Generation for Large Language Models: A Survey 中文名称: 大型语言模型的检索增强生成&#xff1a;一项调查 链接: http://arxiv.org/abs/2312.10997v5 作者: Yunfan Gaoa, Yun Xiongb, Xinyu Gaob, Kangxiang Jiab, Jinliu Panb, Yuxi Bic, …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【基础算法总结】滑动窗口

目录 一&#xff0c;滑动窗口介绍二&#xff0c;算法原理和代码实现209.长度最小的子数组3.无重复字符的最长子串1004.最大连续1的个数III1658.将x减到0的最小操作数904.水果成篮438.找到字符串中所有字母异位词30.串联所有单词的子串76.最小覆盖子串 三&#xff0c;算法总结 一…

【Python知识宝库】错误与异常处理:编写健壮的Python代码

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、错误与异常的定义1. 语法错误2. 异常 二、异常处理1. try块2. except块3. finally块 三、异常处理的最佳实践…

数字IC前端:负的建立时间和保持时间

相关阅读数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 建立时间和保持时间是触发器的两个重要的时序参数&#xff1a;建立时间(setup time)指的是在有效时钟沿前&#xff0c;数据必须到达并稳定的时间&#xff1b;保持时间…

力扣416-分割等和子集(Java详细题解)

题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包&#xff0c;所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话…

zabbix6.4连接邮箱发出警告

添加告警媒介 默认接收人: 故障级别:{TRIGGER.STATUS}。 服务器:【{HOSTNAME1} 】 发生:{TRIGGER.NAME} 故障! 注:默认接收人:相当于邮件的主题 默认信息:邮件的主题 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.…

HTML5中canvas绘图基础详解

第7章 HTML5绘图基础 H5中新增了重要元素canvas,通过绘制任意图形&#xff0c;借助自带API&#xff0c;通过编写js可以控制各种图形&#xff0c;制作动画效果&#xff0c;对web具有划时代意义。 7.1 画布的基础知识 绘图三步骤&#xff1a; 步骤一&#xff1a;使用canvas创…