我是Android和Java编程的新手。我有这个方法的问题。 我试图计算相同字符串出现的次数。
例如:列表l
中的输入,列表m
列出l
:
列出m
:
我的名单:
List<String> l = new ArrayList<>();
List<String> m = new ArrayList<>();
我的方法:
public String Generuj() {
String generator = "";
int x = 0;
int j = 0;
if (l.size() > 0) {
m.add(l.get(0));
for (int i = 1; i < l.size(); i++) {
while (j < l.size() && m.get(m.size() - 1).equals(l.get(j))) {
x++;
j++;
}
m.add("\n" + x + "x " + l.get(i));
}
}
for (int i = 0; i < m.size(); i++) {
generator = generator.concat(m.get(i));
}
return generator;
}
提前感谢您的帮助。
答案 0 :(得分:2)
修改了OP的解决方案:(没有HashMap
)
public String Generuj() {
String generator = "";
int x = 0;
while(l.size() > 0) {
String someString=l.remove(0);
x=0;
for (int i = 0; i < l.size();) {
if(l.get(i).equals(someString)){
x++;
l.remove(i);
}else{
i++;
}
}
m.add("\n" + x + "x " + someString);
}
for (int i = 0; i < m.size(); i++) {
generator = generator.concat(m.get(i));
}
return generator;
}
答案 1 :(得分:1)
如同wanpanman所说,你可以使用hashmap:
private void countEachString(List<String> strings) {
HashMap<String, Integer> stringCountMap = new HashMap<>();
for (String string : strings) {
if (!stringCountMap.containsKey(string)) stringCountMap.put(string, 0);
stringCountMap.put(string, stringCountMap.get(string) + 1);
}
print(stringCountMap);
}
private void print(HashMap<String, Integer> hashMap) {
for (String string : hashMap.keySet()) {
Log.d("print out", hashMap.get(string) + " x " + string);
}
}
您可以根据需要更改打印
答案 2 :(得分:0)
我建议使用HashMap< String, Integer >
,而不是简单地添加x
。做这样的事情:
HashMap< String, Integer > countMap = new HashMap<>();
for( String s : l )
{
if( countMap.containsKey( s ) )
{
// Add one to the string's occurrence.
countMap.put( s, countMap.get( s ) + 1 );
}
else
{
// Set the string's first occurrence.
countMap.put( s, 1 );
}
}
您可以计算输入列表中所有字符串的所有匹配项。如果您仍然需要打印结果,则可以遍历HashMap
EntrySet
并从那里连接:
generator.concat( entry.getValue() + "x " + entry.getKey() );
答案 3 :(得分:0)
在Java 8中,您可以使用流轻松完成:
List<String> result = l.stream() // stream list l
.collect(
Collectors.groupingBy( // collect list elements to map grouping by keys and counting values
Function.identity(),
Collectors.counting()
)
)
.entrySet() // get map's entry set
.stream() // and stream it
.map(entry -> entry.getValue() + "x " + entry.getKey()) // map each map entry to result string
.collect(Collectors.toList()); // collect the results to new list