英文:
Smart way to do if else in Java where the number of parameters is too big
问题
以下是翻译好的内容:
我正在将一个参数名称作为输入传递给我的函数,该参数可以是 "Numeric" 或 "currency" 类型。根据类型,我需要在最终将其打印到使用 Apache POI 库的 Excel 文件之前进行一些格式化。为了检查接收到的参数是否属于这两个类别中的任何一个,我正在进行如下检查:
// 格式化货币或数字列
if (DcHandlerConstant.currencyColumnList().contains(String.valueOf(key))) {
DecimalFormat df = new DecimalFormat("'$'0.00");
df.setGroupingUsed(true);
df.setGroupingSize(3);
value = df.format(input);
}
if (DcHandlerConstant.numericColumnList().contains(String.valueOf(key))) {
DecimalFormat df = new DecimalFormat("0.00");
df.setGroupingUsed(true);
df.setGroupingSize(3);
value = df.format(input);
}
其中,列表包含可能的输入名称。我之所以这样使用,而不是在 if 语句中硬编码该值,是因为参数的数量太多了。目前每个列表中有 10 个元素,而且预计将来会进一步增加,我们预计每个列表中将有近 20 个元素。
但在测试过程中,我观察到 ArrayList 中的 contains
方法需要大量的时间。以下是来自 Visual VM 的快照:
(图片链接不可用)
那么,在不使用 ArrayList 的情况下,如何使用预期的功能?枚举类型是否会是更快的方法?
英文:
I am getting a parameter name as the input to my function which can be of type "Numeric" or "currency". Based on the type, I need to do some formatting before ultimately printing that in an excel file using Apache POI library. to check whether the received parameter belongs to either of the categories, I am doing the check like the following:
//Format the columns currency or numeric
if (DcHandlerConstant.currencyColumnList().contains(String.valueOf(key))) {
DecimalFormat df = new DecimalFormat("'$'0.00");
df.setGroupingUsed(true);
df.setGroupingSize(3);
value = df.format(input);
}
if (DcHandlerConstant.numericColumnList().contains(String.valueOf(key))) {
DecimalFormat df = new DecimalFormat("0.00");
df.setGroupingUsed(true);
df.setGroupingSize(3);
value = df.format(input);
}
where the lists contain the possible input name. I used it like this instead of hard-coding the value in the if clause because the number of parameters is too long, ATM it has 10 elements each and it is only going to increase further, we are expecting almost 20 in each list.
But during the testing I observed that this contains
method in the arraylist is taking an awful lot of time. Below is a snapshot from Visual VM:
So how can I use the intended functionality without using Arraylist? Will enum be a faster approach?
答案1
得分: 1
如果所有的货币或数字类型都是唯一的,那么请使用一个集合,具体来说是 HashSet。如果您可以预先定义货币和数字类型,那么请使用枚举(Enum)和枚举集合(EnumSet)。
英文:
If all of the currency or numeric types are unique then use a Set, specifically a HashSet. If you can predefine the currency and numeric types then use a Enum and an EnumSet.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论