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

jjhzyzn0  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(121)

我对Java还不是很有经验,我希望有人能引导我走上正确的方向,因为现在我觉得我只是在用头撞墙。
第一个类叫做MeasuredParams,它有40多个数值字段(height,weight,wisdSize,written Size-一些int,但大多数是double)。第二类是一个统计分类器,称为分类器。它是在MeasuredParams字段的子集上训练的。分类器已训练的字段的名称按顺序存储在称为reqdFields的数组中。
我需要做的是加载一个新的数组toClassify,其中包含存储在MeasuredParams字段中的值,这些值与reqdFields中找到的字段列表(包括顺序)相匹配。我可以对MeasuredParams类进行任何必要的更改,但我仍然坚持使用Classifier。
我的蛮力方法是去掉MeasuredParams中的字段,改用arrayList,并将字段名存储在Enum对象中作为索引指针。然后循环遍历reqdFields列表,一次一个元素,并在Enum对象中找到匹配的名称,以在arrayList中找到正确的位置。将存储在该位置的值加载到toClassify中,然后继续到reqdFields中的下一个元素。
我不确定如何在Enum对象中进行搜索--如果字段名存储在第二个arrayList中,会容易得多。但是,这两个索引之间的位置必须保持匹配,我又回到使用Enum。我想。我整个下午都在绕圈子,我一直在想一定有更简单的方法。我只是被困住了,不能看到我已经开始的过去。
任何帮助将非常感谢。非常感谢!
迈克尔

fzsnzjdm

fzsnzjdm1#

使用Map而不是List可能会更好,可以使用枚举作为键并获取值。

Map<YourEnumType,ValueType> map = new HashMap<YourEnumType,ValueType>();
neskvpey

neskvpey2#

@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类型都有两个隐式声明的静态方法:

public static E[] values();
public static E valueOf(String name);

values()方法返回一个数组,该数组便于构造Map。或者,可以直接搜索阵列。方法是隐式的;它们将在生成enum时出现在javadoc中。
附录:正如@Bert F所建议的,EnumMap可能是有利的。参见Effective Java Second Edition,* 第33项:使用EnumMap而不是序数索引 *,这是一个使用EnumMap关联enum s的令人信服的示例。

相关问题