我有一个如下所示的文本文件:
code appearance
----------------
j4t8 1
fj89 3
pf6n 1
j4t8 5
我想按出现最多的代码进行排序。正如您所看到的(并且因为我想执行分组)有重复的代码,所以使用HashMap将是一个问题(重复的键)。有任何想法吗?
我有一个如下所示的文本文件:
code appearance
----------------
j4t8 1
fj89 3
pf6n 1
j4t8 5
我想按出现最多的代码进行排序。正如您所看到的(并且因为我想执行分组)有重复的代码,所以使用HashMap将是一个问题(重复的键)。有任何想法吗?
您可以使用
HashMap map = new HashMap<String, List<Integer>>();
外观将存储在与每个代码关联的列表中。然后给定一个代码,您只需检索整数列表并对其进行迭代。
您需要一个 Pair 对象的集合。每对都包含代码和外观。然后使用 Comparator 对集合进行排序,它只比较每个 Pair 对象中的外观,而忽略代码。
不知道这是否是最好的解决方案,但您可以创建这样的列表地图:
Map<String, List<Integer>> map = new HahsMap<String, List<Integer>>();
if(map.contains.(key))
{
map.get(key).add(new_appearance_value);
}
else
{
List<Integer> app = new ArrayList<Integer>();
app.add(new_appearance_value);
map.put(key, app);
}
地图键将是代码,外观的值将进入列表。
注意:要确定哪些代码出现更多,只需检查每个代码列表的大小。
Commons Collections MultiValueMap可用于装饰另一个地图,允许它具有多个键值。