Как упорядочить массив строк по частоте, а не по алфавиту - PullRequest
1 голос
/ 28 апреля 2019
String[] stringArray = {"x", "y", "z", "x", "x", "y", "a"};

final Map<String, Integer> counter = new HashMap<String, Integer>();
for (String str : stringArray)
    counter.put(str, 1 + (counter.containsKey(str) ? counter.get(str) : 0));

List<String> list = new ArrayList<String>(counter.keySet());
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String x, String y) {
        return counter.get(y) - counter.get(x);
    }
});

for (String string : list) {
System.out.println(string)
}

Какой самый быстрый / самый эффективный способ упорядочить это в меньшую коллекцию в порядке частоты каждой строки?

Я попытался использовать HashMap, который работал, однако,Я хочу, чтобы он отображал ["x", "y", "z", "a"], а вместо этого отображал ["x", "y", "a", "z"].Я только хочу, чтобы список сортировался по частоте, а не по алфавиту.

Спасибо, я прикрепил свой код, чтобы показать, что я сделал.

1 Ответ

0 голосов
/ 28 апреля 2019

Заменить тело метода compare() следующим:

if (!counter.get(y).equals(counter.get(x))) 
    return counter.get(y) - counter.get(x);
return x.compareTo(y);
...