如何在Java中执行GROUPBY(sql)

如何在Java中执行GROUPBY(sql),java,algorithm,collections,Java,Algorithm,Collections,我有一个如下所示的文本文件: code appearance ---------------- j4t8 1 fj89 3 pf6n 1 j4t8 5 Map<String, List<Integer>> map = new HahsMap<String, List<Integer>>(); if(map.contains.(key)) { map.get(key).add(new_appearance_valu

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

code    appearance
----------------
j4t8    1
fj89    3
pf6n    1
j4t8    5
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);
}
我想按出现最多的代码排序。正如您所看到的(由于我想执行分组方式),代码重复,因此使用HashMap将是一个问题(重复的键)。有什么想法吗?

你可以用

HashMap map = new HashMap<String, List<Integer>>();
HashMap map=newhashmap();
外观将存储在与每个代码关联的列表中。
然后给定一段代码,您只需检索整数列表并对其进行迭代。

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

不知道这是否是最好的解决方案,但您可以创建如下列表的映射:

code    appearance
----------------
j4t8    1
fj89    3
pf6n    1
j4t8    5
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);
}
Map Map=new HahsMap();
if(映射包含(键))
{
map.get(key).add(新的外观值);
}
其他的
{
List app=new ArrayList();
应用程序添加(新的外观值);
地图放置(按键、应用);
}
其中map键是代码,外观值将进入列表


注意:要确定哪个代码具有更多外观,只需检查每个代码列表的大小。

Commons集合可用于装饰另一个映射,允许它的键具有多个值。

是否有理由不使用ArrayList和Comparator?此集合如何排序?如何快速确定哪种代码的外观最多?@Lugo,如果需要特定的排序,可以使用带有自定义比较器的SortedList。否则,使用默认比较器(自然顺序)