我有一个包含一些字符串的ArrayList 我想得到每个字符串所具有的重复数量,并从最高数字到最低数量排序,如下所示:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
list.add("a");
Set<String> uniqueSet = new HashSet<String>(list);
for (String temp : uniqueSet) {
System.out.println(temp + ": " + Collections.frequency(list, temp));
}
并且我想存储 图表 项目的前10个值,所以我不需要打印它们,我需要将结果放在某处,即例如,当我打电话给“a”时,它给了我3个。
答案 0 :(得分:1)
要将字符串映射到int(字母到频率),您可以使用Map对象:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
list.add("a");
Collections.sort(list);
Map<String, Integer> map = new HashMap<String,Integer>();
for (String string : list) {
if(!map.containsKey(string)){
map.put(string, Collections.frequency(list, string));
}
}
然后地图包含想要的信息。
HashMap是一种存储具有唯一键的信息的便捷方式,并且每个键都有一个值。
答案 1 :(得分:0)
番石榴Multiset非常合适,它的工作方式类似于Set,但会记录元素的数量。
Multiset<String> letters = ImmutableMultiset.of("a", "b", "d", "b", "a", "a", "a", "i", "f");
// [a x 4, b x 2, d, f, i]
letters.count("a");
// 4
获得最重要的计数元素也不会太难。
Multiset<String> top3 = LinkedHashMultiset.create();
letters.entrySet().stream()
.sorted((l1, l2) -> Integer.compare(l2.getCount(), l1.getCount()))
.limit(3)
.forEach(e -> top3.add(e.getElement(), e.getCount()));
// [a x 4, b x 2, d]
答案 2 :(得分:0)
好吧,有些人提到OOP,我创建了一个包含2个变量和getter setter的模型类,我在名称中加了'temp',在Fre中加了'Collections.frequency(list,temp)'然后我试过列表一些对象并使用以下代码对它们进行排序:
Collections.sort(jList, new Comparator<GetJournalsModel>() {
@Override
public int compare(GetJournalsModel a1, GetJournalsModel a2) {
return a1.getFre() - a2.getFre();
}
});