Comparator
не работает, потому что вы не сбрасываете count1
и count2
на 0
между вызовами на compare()
.
На самом деле, проблема в том, что count1
и count2
- поля. Они должны быть локальными переменными.
Переместить объявления count1
и count2
в метод.
Comparator<String> whiteSpaces = new Comparator<String>() {
char c = ' ';
@Override
public int compare(String s1, String s2) {
int count1 = 0;
int count2 = 0;
for(int i = 0; i < s1.length(); i++) {
if(s1.charAt(i) == c){
count1++;
}
}
for(int i = 0; i < s2.length(); i++) {
if(s2.charAt(i) == c) {
count2++;
}
}
return count1 - count2;
}
};
Другие улучшения:
Поле c
должно быть private
и final
и лучше называться.
Создать вспомогательный метод для устранения повторяющегося кода.
Используйте Integer.compare(a, b)
вместо вычитания.
Comparator<String> whiteSpaces = new Comparator<String>() {
private final char separator = ' ';
@Override
public int compare(String s1, String s2) {
return Integer.compare(countSeparators(s1), countSeparators(s2));
}
private int countSeparators(String s) {
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == separator) {
count++;
}
}
return count;
}
};