我选择的数据结构设计执行起来非常尴尬,所以与其就如何执行它征求你的专家意见,我希望你能为我正在尝试做的事情提出一个更自然的数据结构,如下。我正在读取数据行。每列都是一个变量(Animal、Color、Crop、... - 其中有 45 个)。每行数据都有该列变量的值 - 您事先不知道值或行数。
Animal Color Crop ...
-------------------------------------
cat red oat
cat blue hay
dog blue oat
bat blue corn
cat red corn
dog gray corn
... ... ...
当我完成阅读时,它应该捕获每个变量、变量所采用的每个值以及该变量采用该值的次数,如下所示:
Animal [cat, 3][dog,2][bat, 1]...
Color [blue, 3][red,2][gray,1]...
Crop [corn,3][oat, 2][hay,1]...
...
我尝试了几种方法,最接近的方法是使用 GUAVA 哈希映射的多映射,如下所示:
Map<String, Integer> eqCnts = new HashMap<String, Integer>();
Multimap<String, Map> ed3Dcnt = HashMultimap.create();
for (int i = 0; i + 1 < header.length; i++) {
System.out.format("Got a variable of %s\n", tmpStrKey = header[i]);
ed3Dcnt.put(tmpStrKey, new HashMap<String, Integer>());
}
似乎我已经完全创建了我想要的东西,但是使用起来非常尴尬和乏味,而且它的行为方式也很神秘(一方面,即使“ed3Dcnt.put()”插入了一个 HashMap,相应的“.get()”不返回 HashMap,而是返回一个 Collection,这会产生一系列全新的问题。)请注意,我想对值的结果进行排序,从最高到最低,但我认为我可以很容易地做到这一点。
所以,如果你愿意,关于更好的数据结构设计选择的建议?如果没有明显更好的设计选择,我该如何使用 .get() 返回的 Collection,而我想要的只是放入该插槽的单个 HashMap?
非常感谢 - 埃德