Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 帮助在两个类之间匹配字段_Java_Arraylist_Compare_Field - Fatal编程技术网

Java 帮助在两个类之间匹配字段

Java 帮助在两个类之间匹配字段,java,arraylist,compare,field,Java,Arraylist,Compare,Field,我对Java还不是很有经验,我希望有人能把我引向正确的方向,因为现在我觉得我就像是在碰壁 第一个类称为MeasuredParams,它有40多个数字字段(身高、体重、腰围、腕围——有些是整数,但大部分是双精度)。第二类是称为分类器的统计分类器。它已经在MeasuredParams字段的子集上进行了训练。分类器训练过的字段的名称按顺序存储在一个名为reqdFields的数组中 我需要做的是加载一个新数组进行分类,其中的值存储在与reqdFields中的字段列表(包括顺序)匹配的MeasuredPa

我对Java还不是很有经验,我希望有人能把我引向正确的方向,因为现在我觉得我就像是在碰壁

第一个类称为MeasuredParams,它有40多个数字字段(身高、体重、腰围、腕围——有些是整数,但大部分是双精度)。第二类是称为分类器的统计分类器。它已经在MeasuredParams字段的子集上进行了训练。分类器训练过的字段的名称按顺序存储在一个名为reqdFields的数组中

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

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

我不确定如何准确地搜索Enum对象——如果字段名存储在第二个arrayList中,会容易得多。但是,这两个索引之间的索引位置必须保持匹配,我又回到了使用枚举。我想。整个下午我都在兜圈子,我一直在想一定有更简单的方法。我现在只是被困在这里,看不到过去的一切

任何帮助都将不胜感激。非常感谢


Michael

您可能最好使用映射而不是列表,您可以使用enum作为键并获取值

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

@Tom建议使用
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);
    }
}
values()
方法返回一个数组,该数组便于构建
映射。或者,可以直接搜索该数组。方法是隐式的;生成时,它们将出现在您的
enum


附录:正如@Bert F所建议的,A可能是有利的。请参见第33项:使用EnumMap而不是顺序索引,以获取一个用于关联
enum
s.

#1的引人注目的示例-我不明白为什么需要map/lookup(),因为正如您所指出的,已经有一个valueOf()方法可以做同样的事情。lookup()更有效吗#2-如果lookup()有用,它看起来不是线程安全的-最好在map decl之后将init代码移动到静态初始值设定项块;这个例子微不足道。在实际使用中,
Map
只有在O(1)查找的好处大于构建成本时才有意义。可以从
EnumSet.allOf(Key.class)
推断大小。我已经更新了这个例子,使用了一个静态初始值设定项。非常感谢你们的快速响应,尤其是这个例子。我将按照建议尝试EnumMap。感谢您将map声明为map而不是HashMap-没有足够的示例代码鼓励使用接口!但是我会考虑使用一个枚举而不是哈希图来提高效率。
public static E[] values();
public static E valueOf(String name);