1

我有一个字符串看起来像

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

我想将 APP、LEE、KCC 等相同的值分别推送到不同的数组列表(任何集合)中。

例如:

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

这样我就可以确定有多少不同的群体以及它们的价值。

提前致谢。

4

3 回答 3

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
}
于 2013-03-05T11:41:13.340 回答
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);
    }
于 2013-03-05T11:43:55.900 回答
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);
}

如果您只需要不同值的计数,请将 List 替换为 AtomicInteger,然后递增该值,那么您最终会得到一个不同字符串的映射,以及它出现的次数。

于 2013-03-05T11:46:32.387 回答