2010-01-27 2 views
4

Мне нужно отсортировать список на основе MyDto.name в клиентском коде GWT. В настоящее время я пытаюсь сделать это ...Сортировка в GWT на основе строки

Collections.sort(_myDtos, new Comparator<MyDto>() { 

     @Override 
     public int compare(MyDto o1, MyDto o2) { 
     return o1.getName().compareTo(o2.getName()); 
     } 
}); 

К сожалению, сортировка не то, что я ожидал, как и все в верхнем регистре находится перед строчными. Например, ESP приходит перед aESP.

ответ

2

Это потому, что заглавные буквы приходят до строчных букв. Похоже, вы хотите нечувствительность к регистру:

Collections.sort(_myDtos, new Comparator<MyDto>() { 

     @Override 
     public int compare(MyDto o1, MyDto o2) { 
     return o1.getName().toLower().compareTo(o2.getName().toLower()); 
     } 
}); 

toLower() - ваш друг.

+1

Это будет работать, но String.CASE_INSENSITIVE_ORDER, похоже, работает лучше всего. – benstpierre

+4

И я могу добавить, что было бы лучше/проще использовать 'compareToIgnoreCase' http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#compareToIgnoreCase(java.lang .String), хотя результаты должны быть одинаковыми. –

1

Я обычно для этого:

@Override 
public int compare(MyDto o1, MyDto o2) { 
    return o1.getName().compareToIgnoreCase(o2.getName()); 
} 

Потому что мне кажется, что все строки манипуляции в противном случае вы делаете (TOLOWER() или TOUPPER ()) оказалось бы менее эффективным. Таким образом, по крайней мере, вы не создаете две новые строки.

Смежные вопросы