使用重复的字符串对ArrayList进行排序

时间:2016-10-13 20:51:34

标签: java android arraylist charts duplicates

我有一个包含一些字符串的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个。

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();
        }
    });