当前位置: 首页 > news >正文

Java 枚举的 valueOf() 方法与 Stream API 查找枚举对象

文章目录

    • 一、枚举类型概述
    • 二、valueOf() 方法详解
      • 1. 什么是 valueOf() 方法?
      • 2. 使用示例
    • 三、使用 Stream API 查找枚举对象
      • 1. 使用 Stream 查找枚举对象
      • 2. 使用 Stream 统计枚举对象
    • 四、总结
      • 推荐阅读文章

在 Java 中,枚举(enum)是一种特殊的类,用于表示一组常量。它不仅使代码更具可读性,还提供了类型安全性。Java 枚举还带有一些有用的方法,其中最常用的之一是 valueOf() 方法。此外,结合 Java 8 引入的 Stream API,我们可以轻松地处理枚举。本文将深入探讨 valueOf() 方法的使用以及如何通过 Stream API 查找枚举对象。

一、枚举类型概述

枚举类型是用 enum 关键字定义的,表示一组固定的常量。例如,表示一个星期的枚举类型:

public enum Day {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

二、valueOf() 方法详解

1. 什么是 valueOf() 方法?

valueOf() 是枚举类的一个静态方法,允许我们根据指定的字符串返回对应的枚举常量。这个方法的签名如下:

public static T valueOf(String name)

其中,T 是枚举类型的名称,name 是枚举常量的名称(必须完全匹配,区分大小写)。

2. 使用示例

让我们看看如何使用 valueOf() 方法:

public class EnumExample {public static void main(String[] args) {// 获取枚举常量Day day = Day.valueOf("MONDAY");System.out.println("Selected day: " + day); // 输出: Selected day: MONDAY// 处理无效的输入try {Day invalidDay = Day.valueOf("FUNDAY"); // 这将抛出 IllegalArgumentException} catch (IllegalArgumentException e) {System.out.println("Error: " + e.getMessage()); // 输出: Error: No enum constant Day.FUNDAY}}
}

在上述代码中,我们成功获取了 MONDAY 枚举常量。如果尝试使用无效的常量名,如 FUNDAY,将会抛出 IllegalArgumentException

三、使用 Stream API 查找枚举对象

Java 8 引入的 Stream API 使得操作集合更加简单高效。对于枚举类型,我们可以使用 Stream API 来查找、过滤和处理枚举常量。

1. 使用 Stream 查找枚举对象

假设我们想要查找所有工作日(MONDAY 到 FRIDAY)的枚举常量,可以使用 Stream 来实现:

import java.util.Arrays;public class EnumStreamExample {public static void main(String[] args) {// 查找工作日Day[] workdays = Arrays.stream(Day.values()).filter(day -> day != Day.SATURDAY && day != Day.SUNDAY).toArray(Day[]::new);System.out.println("Workdays: " + Arrays.toString(workdays)); // 输出: Workdays: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]}
}

在这个例子中,我们使用 Day.values() 方法获取所有的枚举常量,然后通过 Stream 进行过滤,只保留工作日。

2. 使用 Stream 统计枚举对象

除了查找,我们还可以使用 Stream 来统计枚举对象的数量,例如计算一周中的天数:

public class EnumCountExample {public static void main(String[] args) {long totalDays = Arrays.stream(Day.values()).count();System.out.println("Total days in a week: " + totalDays); // 输出: Total days in a week: 7}
}

但是如果是枚举值的话,推荐还是使用 valueOf() 进行枚举查询(通常用)。

实际中的一个案例演示

    @Overridepublic WeaResult<Map<String, Object>> customAction(Map<String, Object> params) {EsbActionFlag esbActionFlag = Arrays.stream(EsbActionFlag.values()).filter(e -> e.name().equals(Optional.ofNullable(params.get("esbActionFlag")).map(Object::toString).orElse(null))).findFirst().orElse(null);Assert.notNull(esbActionFlag, SystemEnv.getHtmlLabelName(272064,"请确认动作流必传参数(esbActionFlag)是否传递正确"));return WeaResult.success(esbActionHandleBeanFactory.getEsbActionHandleBean(esbActionFlag).doAction(params));}

通过 valueOf() 方法直接简化成一行代码,如下:

    @Overridepublic WeaResult<Map<String, Object>> customAction(Map<String, Object> params) {EsbActionFlag esbActionFlag = EsbActionFlag.valueOf(String.valueOf(params.get("esbActionFlag")));Assert.notNull(esbActionFlag, SystemEnv.getHtmlLabelName(272064,"请确认动作流必传参数(esbActionFlag)是否传递正确"));return WeaResult.success(esbActionHandleBeanFactory.getEsbActionHandleBean(esbActionFlag).doAction(params));}

四、总结

在 Java 中,valueOf() 方法是用于从字符串获取对应枚举常量的便利工具,但在使用时需要确保输入字符串的正确性,以避免异常的发生。与此同时,借助 Java 8 的 Stream API,我们可以轻松地对枚举常量进行查询和处理,使得代码更加简洁与高效。

通过这些工具和方法,我们可以更好地利用枚举类型的优势,提升代码的可读性和可维护性。在实际开发中,理解和灵活运用这些特性将大大提高我们的工作效率。

推荐阅读文章

1、使用 Spring 框架构建 MVC 应用程序:初学者教程
2、有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
3、如何理解应用 Java 多线程与并发编程?
4、Java Spring 中常用的 @PostConstruct 注解使用总结
5、线程 vs 虚拟线程:深入理解及区别
6、深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
7、10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!
8、“打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”
9、Java 中消除 If-else 技巧总结
10、线程池的核心参数配置(仅供参考)
11、【人工智能】聊聊Transformer,深度学习的一股清流(13)

12、Java 枚举的几个常用技巧,你可以试着用用

相关文章:

Java 枚举的 valueOf() 方法与 Stream API 查找枚举对象

文章目录 一、枚举类型概述二、valueOf() 方法详解1. 什么是 valueOf() 方法&#xff1f;2. 使用示例 三、使用 Stream API 查找枚举对象1. 使用 Stream 查找枚举对象2. 使用 Stream 统计枚举对象 四、总结推荐阅读文章 在 Java 中&#xff0c;枚举&#xff08;enum&#xff09…...

Git的认识及基本操作

目录 一:Git的基本认识 二:Git的安装 三:Git的基本操作 1.创建本地仓库 2.配置Git 3.⼯作区、暂存区、版本库 4. 修改文件 5.版本回退 6.撤销修改 7.删除文件 一:Git的基本认识 1.实例引入 在日常当中我们常常会遇到这样的事&#xff0c;就是在做实验报告或者课设…...

python 日志库loguru

python 日志库loguru 安装 pip install loguru最简单的基本使用 from loguru import loggerlogger.success("Hello from success!") logger.info("Hello from info!") logger.debug("Hello from debug!") logger.warning("Hello from wa…...

基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…...

Chrome谷歌浏览器加载ActiveX控件之JT2Go控件

背景 JT2Go是一款西门子公司出品的三维图形轻量化预览解决工具&#xff0c;包含精确3D测量、基本3D剖面、PMI显示和改进的选项过滤器等强大的功能。JT2Go控件是一个标准的ActiveX控件&#xff0c;曾经主要在IE浏览器使用&#xff0c;由于微软禁用IE浏览器&#xff0c;导致JT2Go…...

Java基础概览和常用知识(七)

什么是自动装箱和自动拆箱&#xff0c;原理是什么&#xff1f; 自动装箱和自动拆箱是Java编程语言中的两个重要概念&#xff0c;它们涉及到基本数据类型与其对应包装类之间的自动转换。 一、定义 自动装箱&#xff1a;是指Java编译器在需要将基本数据类型转换为对应的包装类…...

STL-string

STL的六大组件&#xff1a; string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…...

数据库基础-学习版

目录 数据库巡检清理表空间高水位处理重建索引扩展字段异常恢复处置常见命令汇总 数据库巡检 数据库巡检的主要目的是确保数据库的健康状态、性能和安全,及时发现潜在的问题。 一 数据库状态检查 查看数据库列表:SHOW DATABASES; 检查当前数据库SELECT DATABASE(); 检查数据…...

【Gin】Gin框架介绍和使用

一、简单使用Gin框架搭建一个服务器 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET 请求方法r.GET("/hello", func(c *gin.Context) {// c.JSON 返回的是JSON格式的数据c.JSON(200, g…...

AI大模型带来哪些创业机遇?

AI 大模型的快速发展带来了许多创新和创业机遇&#xff0c;涵盖了从行业应用到基础设施优化的方方面面。以下是一些具体的创业机会&#xff1a; 1、垂直行业应用 大模型可以根据不同行业的需求进行定制和优化&#xff0c;提供高度专业化的 AI 解决方案。 医疗领域&#xff1a;…...

[Linux] 层层深入理解文件系统——(3)磁盘组织存储的文件

标题&#xff1a;[Linux] 层层深入理解文件系统——&#xff08;3&#xff09;磁盘组织组织存储的文件 个人主页水墨不写bug 目录 一、磁盘中的文件 1&#xff09;磁盘的物理结构 2&#xff09;磁盘的CHS寻址法 3&#xff09;磁盘的空间管理 二、磁盘如何组织存储文件 三…...

Apache Cordova学习计划

Apache Cordova&#xff08;之前称为 PhoneGap&#xff09;&#xff1a; 1. PhoneGap的起源&#xff1a;2008年8月&#xff0c;PhoneGap在旧金山的iPhoneDevCamp上首次亮相&#xff0c;由Nitobe公司开发&#xff0c;目的是“为跨越Web技术和iPhone之间的鸿沟牵线搭桥”。 2. Ph…...

Unity学习日志-API

Untiy基本API 角度旋转自转相对于某一个轴 转多少度相对于某一个点转练习 角度 this.transform.rotation(四元数)界面上的xyz(相对于世界坐标) this.transform.eulerAngles;相对于父对象 this.transform.localEulerAngles;设置角度和设置位置一样&#xff0c;不能单独设置xz…...

Java基础常见面试题总结(上)

基础概念与常识 Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&…...

4 -《本地部署开源大模型》在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型

在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型 大模型部署整体来看并不复杂&#xff0c;且官方一般都会提供标准的模型部署流程&#xff0c;但很多人在部署过程中会遇到各种各样的问题&#xff0c;很难成功部署&#xff0c;主要是因为这个过程会涉及非常多依赖库的安装和更新及…...

本地如何使用Pycharm连接远程服务器调试torchrun

pycharm 远程连接服务器并且debug, 支持torch.distributed.launch debug_pycharm远程debug-CSDN博客 上面这个博客写的真的非常好&#xff0c;记录一下&#xff0c;需要注意该博主的主机为mac 本人可调试版本为&#xff1a; 可直接运行版本为&#xff1a;...

Visual Studio 2022常用快捷键

1. 基本编辑快捷键 Ctrl X&#xff1a;剪切选中内容Ctrl C&#xff1a;复制选中内容Ctrl V&#xff1a;粘贴内容Ctrl Z&#xff1a;撤销Ctrl Y&#xff1a;重做Ctrl Shift L&#xff1a;删除当前行Ctrl K, Ctrl C&#xff1a;注释选中的代码Ctrl K, Ctrl U&#xf…...

mysql innodb 引擎如何直接复制数据库文件?

mysql innodb 引擎如何直接复制数据库文件&#xff1f;介绍如下&#xff1a; 1、首先找到数据库文件所在位置 一般可以看my.conf/my.ini配置的文件的“datadir” 看示例&#xff1a; “MAMP”在Macos下的数据库文件位置&#xff1a; /Library/Application Support/appsolu…...

python中的global和nonlocal关键字以及闭包和模块

global i 这样的用法在于 Python 中&#xff0c;但需要在一个函数内部使用&#xff0c;以便将变量 i 声明为全局变量。让我们来详细讲解一下它的用法。 什么是全局变量&#xff1f; 全局变量是指在函数外部定义的变量&#xff0c;可以在任何函数中访问和修改。如果你需要在函数…...

LabVIEW风机滚动轴承监测系统

矿井主通风机作为矿井中最重要的通风设备&#xff0c;一旦出现故障&#xff0c;不仅会影响矿井内的空气质量&#xff0c;还可能引发安全事故。研究表明&#xff0c;通风机中约30%的故障是由轴承问题引起的。因此&#xff0c;能够实时监控矿井主通风机轴承状态的系统&#xff0c…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...