如何将相同的字符串分组到任何集合中?

时间:2013-03-05 11:38:20

标签: java

我有一个字符串看起来像

 {APP,LEE,APP,KCC,KCC,LEE,APP}.

我想将APP,LEE,KCC等相同的值分别推送到不同的arraylists(任何集合)。

例如:

  • arraylist 1应该有{APP,APP,APP}
  • arraylist 2应该有{KCC,KCC}
  • arraylist 3应该{LEE,LEE}

这样我就可以确定有多少不同的群体,并确定其价值。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以改为从ArrayList创建一个Set(这将删除重复项),然后获取该组的大小,该组的每个项目将是一个组

Set<String> groups = new HashSet<String>(list);

groups.size(); //Number of groups

for(String group : groups) {
    System.out.println(group); //Print each value
}

答案 1 :(得分:1)

使用Map<String, List<String>>。每个值都包含一个元素列表(如果需要,可以使用Integer计算)

添加元素时:

List<String> elemList = myMap.get(key);
if (elemList == null){
    elemList = new ArrayList<String>;
    myMap.put(key, elemList);
}
elemList.add(key);

虽然使用计数器更好......

    Map<String, Integer> myMap = new HashMap<>();
...
    Integer count = myMap.get(key);
    if (count == null){
        myMap.put(key, 1);
    } else {
        myMap.put(key, count + 1);
    }

答案 2 :(得分:1)

最简单的方法是为每个列表创建一个地图。然后,如果某个键没有退出,请创建它,然后追加。

这样的事情:

Map<String, List<String>> result = new HashMap<String, List<String>>();

String[] values = source.substring(1, source.length() - 1).split(",");
for (String value : values) {
   List<String> existingMatches = result.get(value);
   if (existingMatches == null) {
     existingMatches = new ArrayList<String>();
     result.put(value, existingMatches);
   }
   existingMatches.add(value);
}

如果您只需要计算不同的值,请使用AtomicInteger替换List,然后递增该值,然后最终得到一个不同字符串的映射,以及它出现次数的计数。 / p>