繁体   English   中英

计数Arraylist中字符串的出现

[英]Count occurence of string in Arraylist

让我们假设我有以下列表。

List<String> list=new ArrayList<String>();
list.add("sultan");
list.add("Masum");
list.add("sultan");
list.add("Sorry");
list.add("sultan");
list.add("Masum");
list.add("sultan");
list.add("Tarek");
list.add("sultan");

我想知道Arraylist中每个字符串的出现次数。 我怎样才能做到这一点 ? 而且我也想知道在最高时间出现在此Arraylist中的字符串。 对于此特定示例,答案是“苏丹”。

可能会有帮助

int occ = Collections.frequency(list, "Masum");

如果希望所有字符串都位于第一个列表中,则可以执行以下操作:

import java.util.*;

import java.util.Map.Entry;
//...

Set<String> uniques = new HashSet(list);
Map<String, Integer> counts = new HashMap<String, Integer>();

for (String elem : uniques) {
    counts.put(elem, Collections.frequency(list, elem));
}

因此,最后您将获得映射中每个字符串的计数。 一对一...这将执行以下操作:

  • 通过从初始列表创建集合,您将拥有列表中的每个字符串,然后“遍历”列表并为任何给定字符串计算每个频率。

至于最高频率,您可以在条目集上使用Collections.max方法,如下所示:

Collections.max(counts.entrySet(), new Comparator<Entry<String, Integer>>() {
        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
            return (o1.getValue() - o2.getValue());
        }
    })

检查一下

Collections.frequency此示例

从这个例子:

System.out.println("\nExample 1 - Count 'a' with frequency");
System.out.println("a : " + Collections.frequency(list, "a"));

System.out.println("\nExample 2 - Count all with frequency");
Set<String> uniqueSet = new HashSet<String>(list);
for (String temp : uniqueSet) {
    System.out.println(temp + ": " + Collections.frequency(list, temp));
}

System.out.println("\nExample 3 - Count all with Map");
Map<String, Integer> map = new HashMap<String, Integer>();

for (String temp : list) {
    Integer count = map.get(temp);
    map.put(temp, (count == null) ? 1 : count + 1);
}
printMap(map);

System.out.println("\nSorted Map");
Map<String, Integer> treeMap = new TreeMap<String, Integer>(map);
printMap(treeMap);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM