打印字符串的重复

时间:2016-09-24 16:02:38

标签: java arrays string sorting arraylist

我有以下代码:

ArrayList<String> processed;
processed = new ArrayList<String>();

int biggest=0;
int w=0;
for (int i=0; i<list.size();i++) {
    if(!processed.contains(list.get(i))) {
        System.out.println(list.get(i) + ": " + Collections.frequency(list, list.get(i)));
        processed.add(list.get(i));
    }
}

for (int i1=0; i1<list.size();i1++) {
    if ((Collections.frequency(list, list.get(i1)))> biggest) {
        biggest=(Collections.frequency(list, list.get(i1)));
        w=i1;
    }
}
System.out.println();
System.out.println ("max == " + list.get(w));

输出是:

sorry: 4
bat: 1
train: 2
teddy: 2
ball: 2
max == sorry

我想将重复次数最多的项目排序。我知道我可以使用Collections.Sort对包含重复的数组进行排序。但是,我如何将其与名称相匹配?对于前者如果我对数组进行了排序,那么[4, 2, 2, 2, 1]如何打印:Sorry:4, Teddy: 2, Train: 2, Ball: 2, Bat:1

3 个答案:

答案 0 :(得分:0)

使用HashMap存储名称和重复对: Map<String, Integer> frequeciesMap = new HashMap<>();

答案 1 :(得分:0)

以下是使用Java 8的示例。这将按照String的出现顺序打印。如果您想将其限制为最重复,您也可以使用限制来执行此操作。第一个Map有一个频率计数,第二个是有序的。你也可以将它们组合成一个长表达式。希望这符合您的需求!

ArrayList<String> processed = new ArrayList<String>();
processed.add("One");
processed.add("Two");
processed.add("Two");
processed.add("Three");
processed.add("Three");
processed.add("Three");
processed.add("Four");
processed.add("Four");
processed.add("Three");
Map<String, Long> counts = processed.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));


Map<String, Long> sortedCounts = counts.entrySet().stream().sorted(Collections.reverseOrder(Entry.comparingByValue()))
        .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, TreeMap::new));

sortedCounts.entrySet().stream()
   .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
   .forEach(System.out::println);

打印

Three=4
Four=2
Two=2
One=1

答案 2 :(得分:0)

Collections.sort允许您作为第二个参数提供Comparator作为与对象进行比较的方式。因此,我建议您创建一个包含您的单词及其频率的类,然后对这些类进行排序。

相关问题