我有一个字符串看起来像
{APP,LEE,APP,KCC,KCC,LEE,APP}.
我想将 APP、LEE、KCC 等相同的值分别推送到不同的数组列表(任何集合)中。
例如:
- arraylist 1 应该有 {APP,APP,APP}
- arraylist 2 应该有 {KCC,KCC}
- arraylist 3 应该有 {LEE,LEE}
这样我就可以确定有多少不同的群体以及它们的价值。
提前致谢。
我有一个字符串看起来像
{APP,LEE,APP,KCC,KCC,LEE,APP}.
我想将 APP、LEE、KCC 等相同的值分别推送到不同的数组列表(任何集合)中。
例如:
这样我就可以确定有多少不同的群体以及它们的价值。
提前致谢。
您可以改为从 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
}
使用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);
}
用每个列表创建一个地图是最简单的。然后如果一个键没有退出,创建它的条目,然后追加。
像这样的东西:
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,然后递增该值,那么您最终会得到一个不同字符串的映射,以及它出现的次数。