我有以下代码:
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
答案 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
作为与对象进行比较的方式。因此,我建议您创建一个包含您的单词及其频率的类,然后对这些类进行排序。