1

我有一个如下所示的文本文件:

code    appearance
----------------
j4t8    1
fj89    3
pf6n    1
j4t8    5

我想按出现最多的代码进行排序。正如您所看到的(并且因为我想执行分组)有重复的代码,所以使用HashMap将是一个问题(重复的键)。有任何想法吗?

4

4 回答 4

0

您可以使用

HashMap map = new HashMap<String, List<Integer>>();

外观将存储在与每个代码关联的列表中。然后给定一个代码,您只需检索整数列表并对其进行迭代。

于 2012-10-14T10:06:37.643 回答
0

您需要一个 Pair 对象的集合。每对都包含代码和外观。然后使用 Comparator 对集合进行排序,它只比较每个 Pair 对象中的外观,而忽略代码。

于 2012-10-14T10:08:10.547 回答
0

不知道这是否是最好的解决方案,但您可以创建这样的列表地图:

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);
}

地图键将是代码,外观的值将进入列表。

注意:要确定哪些代码出现更多,只需检查每个代码列表的大小。

于 2012-10-14T10:12:10.170 回答
0

Commons Collections MultiValueMap可用于装饰另一个地图,允许它具有多个键值。

于 2012-10-14T10:16:16.253 回答