我对Java还不是很有经验,我希望有人可以引导我朝着正确的方向前进,因为现在我觉得我只是把头靠在墙上......
第一个类叫做MeasuredParams,它有40多个数字字段(高度,重量,腰围尺寸,腕值尺 - 有些是int,但大多是双倍)。第二类是称为分类器的统计分类器。它已在MeasuredParams字段的子集上进行了培训。分类器已经过训练的字段名称按顺序存储在名为reqdFields的数组中。
我需要做的是加载一个新数组toClassify,其中存储在MeasuredParams字段中的值与reqdFields中找到的字段列表(包括顺序)相匹配。我可以对MeasuredParams类进行任何必要的更改,但我仍然坚持使用Classifier。
我的暴力方法是删除MeasuredParams中的字段并改为使用arrayList,并将字段名称存储在Enum对象中以充当索引指针。然后循环遍历reqdFields列表,一次一个元素,并在Enum对象中找到匹配的名称,以在arrayList中找到正确的位置。将存储在该位置的值加载到toClassify,然后继续到reqdFields中的下一个元素。
我不确定我将如何搜索Enum对象 - 如果字段名称存储在第二个arrayList中会更容易。但那时两者之间的指数位置必须保持匹配,我又回到了使用Enum。我认为。我整个下午都在乱跑,我一直认为必须有一种更简单的方法。我现在只是被困住了,看不到我已经开始的事情了。
任何帮助都会非常感激。非常感谢!
迈克尔
答案 0 :(得分:3)
你可能最好使用Map而不是List,你可以使用enum作为键并获取值。
Map<YourEnumType,ValueType> map = new HashMap<YourEnumType,ValueType>();
答案 1 :(得分:1)
@ Tom建议使用Map
是首选方法。这是一个简单的示例,构造了这样的Map
以供静态lookup()
方法使用。
private enum Season {
WINTER, SPRING, SUMMER, FALL;
private static Map<String, Season> map = new HashMap<String, Season>();
static {
for (Season s : Season.values()) {
map.put(s.name(), s);
}
}
public static Season lookup(String name) {
return map.get(name);
}
}
请注意,每个enum
类型都有两个隐式声明的静态methods:
public static E[] values();
public static E valueOf(String name);
values()
方法返回一个便于构造Map
的数组。或者,可以直接搜索阵列。方法是隐含的;它们会在enum
生成后显示在enum
。
附录:正如@Bert F所建议的,javadoc
可能是有利的。请参阅EnumMap
,第33项:使用EnumMap而不是序数索引,这是使用Effective Java Second Edition关联{{1}}的一个引人注目的示例。