帮助匹配两个类之间的字段

时间:2010-04-03 04:54:55

标签: java arraylist compare field

我对Java还不是很有经验,我希望有人可以引导我朝着正确的方向前进,因为现在我觉得我只是把头靠在墙上......

第一个类叫做MeasuredParams,它有40多个数字字段(高度,重量,腰围尺寸,腕值尺 - 有些是int,但大多是双倍)。第二类是称为分类器的统计分类器。它已在MeasuredParams字段的子集上进行了培训。分类器已经过训练的字段名称按顺序存储在名为reqdFields的数组中。

我需要做的是加载一个新数组toClassify,其中存储在MeasuredParams字段中的值与reqdFields中找到的字段列表(包括顺序)相匹配。我可以对MeasuredParams类进行任何必要的更改,但我仍然坚持使用Classifier。

我的暴力方法是删除MeasuredParams中的字段并改为使用arrayList,并将字段名称存储在Enum对象中以充当索引指针。然后循环遍历reqdFields列表,一次一个元素,并在Enum对象中找到匹配的名称,以在arrayList中找到正确的位置。将存储在该位置的值加载到toClassify,然后继续到reqdFields中的下一个元素。

我不确定我将如何搜索Enum对象 - 如果字段名称存储在第二个arrayList中会更容易。但那时两者之间的指数位置必须保持匹配,我又回到了使用Enum。我认为。我整个下午都在乱跑,我一直认为必须有一种更简单的方法。我现在只是被困住了,看不到我已经开始的事情了。

任何帮助都会非常感激。非常感谢!

迈克尔

2 个答案:

答案 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}}的一个引人注目的示例。