java - 查找 String 是否不在 ENUM 列表中的最佳方法
问题描述
String
如果给定不在列表中,我需要查找ENUMs
。
这些Strings
以空格返回,即:“儿童护理”、“信用卡”等...
任何其他ExpenseType
都应该映射到OTHER
,除了HOA
。HOA
应该完全忽略。
我的枚举如下:
public enum ExpenseType {
AUTOLOAN("AUTO LOAN"),
ALIMONY("ALIMONY"),
CHILDCARE("CHILD CARE"),
CREDITCARDS("CREDIT CARDS"),
INSTALLMENTLOANS("INSTALLMENT LOANS"),
FOOD("FOOD"),
UTILITIES("UTILITIES"),
TRANSPORTATION("TRANSPORTATION"),
OTHER("OTHER");
private String expenseType;
ExpenseType(String expenseType) {
this.expenseType = expenseType;
}
@Override public String toString() {
return this.expenseType;
}
}
我现在这样做的方式如下:
String expenseDescription = expense.getExpenseDesc().replaceAll(" ", "");
if(EnumUtils.isValidEnum(ExpenseType.class, expenseDescription)) {
monthlyExpenses.setType(ExpenseType.valueOf(expenseDescription).toString());
}
else if(!expenseDescription.equals("HOA")) {
monthlyExpenses.setType(ExpenseType.OTHER.toString());
}
有谁知道更好的方法来做到这一点?
解决方案
如果适用,为什么不使用getEnum来获取 Enum(检查 null 或在需要时使用 Optional)
ExpenseType monthlyExpenses = EnumUtils.getEnum(ExpenseType.class, expenseDescription);
获取类的枚举,如果找不到则返回 null。
此方法与 Enum.valueOf(java.lang.Class, java.lang.String) 的不同之处在于它不会为无效的枚举名称引发异常。
也更喜欢在枚举中添加一个代码(字符串)作为参考,它不包含空格和特殊字符,例如
//...
CHILDCARE("CHILD_CARE","CHILD CARE"),
//...
private String expenseType;
private String expenseTypeCode;
ExpenseType(String expenseType, String expenseTypeCode) {
this.expenseType = expenseType;
this.expenseTypeCode = expenseTypeCode;
}
推荐阅读
- javascript - 从web api响应c#下载带有angularJS的filesaver.js文件
- java - 获取类定义中泛型的参数化类型
- android - 如何使用 Flutter 将整数存储到 Firestore
- android - Ionic 4 应用程序未在 Android 9 和低于 7 的 Android 版本中运行
- excel - 为工作簿密码保护调试 VBA
- vue.js - 嵌套 Nuxt 实例
- javascript - 将椭圆曲线加密与 OpenSSL 一起用于 php 和 javascript
- c# - 如何从 PDF 中提取所有值?
- c# - 仅接收 asc 或 desc 的 sortBy 和 sortorder 的有效性如何?
- python - 在 Tkinter 文本中撤消和重做时如何保留样式信息(标签)?