我收到了这些代码:
ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(
list);
columnSortHandler.setComparator(nameColumn,
new Comparator<List<String>>() {
public int compare(List<String> o1, List<String> o2) {
if (o1 == o2) {
return 0;
}
// Compare the name columns.
if (o1 != null) {
return (o2 != null) ? o1.get(0).compareTo(o2.get(0)) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
当排序列包含iPhone 1,iPhone 2,iPhone 3 ...然后它正确排序,即iPhone 1,iPhone 2,iPhone 3用于升序和放大iPhone 3,iPhone 2,iPhone 1用于降序
但是当排序列包含:
1.92 MP
3.15 MP AF 0.31 MP
3.2 MP
5 MP AF和闪光灯
1.3 MP
1.3 MP
2 MP(后); 0.3 MP(正面)
1.92 MP AF带闪光灯(后部)
它没有正确的顺序,它甚至没有将2“1.3 MP”单元格彼此相邻。以上列表的正确顺序应为:
1.3 MP
1.3 MP
1.92 MP
1.92 MP AF带闪光灯(后部)
2 MP(后); 0.3 MP(正面)
3.15 MP AF 0.31 MP
3.2 MP
5 MP AF和闪光灯
上面的代码有什么问题吗?
答案 0 :(得分:0)
正如网站的作者所说,java sorting algorithm
基于ASCII
。它永远不会像人类想象的那样起作用。 :)粗鲁但事实。
人们使用与软件不同的数字对字符串进行排序。
在上面的链接download AlphanumComparator.java
中使用它。
答案 1 :(得分:0)
我还将Any o1.get(0).compareTo(o2.get(0))==0
添加到代码中,就像Any King建议的那样,但排序仍然非常混乱。
ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(
list);
columnSortHandler.setComparator(nameColumn,
new Comparator<List<String>>() {
public int compare(List<String> o1, List<String> o2) {
if (o1.get(0).compareTo(o2.get(0))==0) {
return 0;
}
// Compare the name columns.
if (o1 != null) {
return (o2 != null) ? o1.get(0).compareTo(o2.get(0)) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
答案 2 :(得分:0)
我认为问题是
ListHandler<List<String>>
&安培;不是java排序算法cos看Gwt Sample http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellTable,它对地址进行精美排序&amp;代码使用非常简单的比较。查看用于排序地址的样本gwt代码
addressColumn.setSortable(true);
addressColumn.setDefaultSortAscending(false);
sortHandler.setComparator(addressColumn, new Comparator<ContactInfo>() {
@Override
public int compare(ContactInfo o1, ContactInfo o2) {
return o1.getAddress().compareTo(o2.getAddress());
}
});