Java GWT、ListHandler<;列表<;字符串>&燃气轮机;columnSortHandler排序不正确
我得到了这些代码:Java GWT、ListHandler<;列表<;字符串>&燃气轮机;columnSortHandler排序不正确,java,gwt,sorting,celltable,Java,Gwt,Sorting,Celltable,我得到了这些代码: ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>( list); columnSortHandler.setComparator(nameColumn, new Comparator<List<
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);
ListHandler columnSortHandler=新建ListHandler(
名单);
columnSortHandler.setComparator(名称列,
新比较器(){
公共整数比较(列表o1,列表o2){
如果(o1==o2){
返回0;
}
//比较名称列。
如果(o1!=null){
返回值(o2!=null)?o1.get(0)。与(o2.get(0))进行比较:1;
}
返回-1;
}
});
表.addColumnSortHandler(columnSortHandler);
当排序列包含iPhone 1、iPhone 2、iPhone 3时。。。然后它正确地排序,即iphone1、iphone2、iphone3代表升序,iphone3、iphone2、iphone1代表降序
但当排序列包含:
1.92兆帕
3.15兆帕AF 0.31兆帕
3.2 MP
5 MP自动对焦和闪光灯
1.3 MP
1.3 MP
2 MP(后部);0.3兆帕(前)
带闪光灯的1.92 MP自动对焦(后) 它没有遵循正确的顺序,它甚至没有把2个“1.3 MP”的电池放在一起。上述列表的正确顺序应为:
1.3 MP
1.3 MP
1.92 MP
带闪光灯的1.92 MP自动对焦(后)
2 MP(后部);0.3兆帕(前)
3.15兆帕AF 0.31兆帕
3.2 MP
5 MP自动对焦和闪光灯
上面的代码有什么问题吗?正如网站作者所说,
java排序算法
是基于ASCII
的。它从来不像人类想象的那样工作。:)粗鲁但是事实
人们对字符串的数字排序与软件不同。
使用
在上面的链接中,AlphanumComparator.java
并使用它。我还按照任何国王的建议在代码中添加了o1.get(0).compareTo(o2.get(0))==0
,但排序仍然非常混乱
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);
ListHandler columnSortHandler=新建ListHandler(
名单);
columnSortHandler.setComparator(名称列,
新比较器(){
公共整数比较(列表o1,列表o2){
如果(o1.get(0).compareTo(o2.get(0))==0){
返回0;
}
//比较名称列。
如果(o1!=null){
返回值(o2!=null)?o1.get(0)。与(o2.get(0))进行比较:1;
}
返回-1;
}
});
表.addColumnSortHandler(columnSortHandler);
我想问题是
ListHandler<List<String>>
ListHandler
&不是java排序算法,因为看Gwt示例,它对地址进行了漂亮的排序&代码使用非常简单的比较。查看排序地址的示例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());
}
});
addressColumn.setSortable(真);
addressColumn.setDefaultSortAscending(false);
setComparator(addressColumn,new Comparator()){
@凌驾
公共整数比较(联系人信息o1、联系人信息o2){
返回o1.getAddress().compareTo(o2.getAddress());
}
});
@Baadshah数字排序如何解释Tom不将“1.3 MP”单元格相邻放置的问题?我同意“1”、“2”和“10”将使用ASCII排序按“1、10、2”的顺序进行排序,但这并不能解释Tom的问题。@Tom我认为您的问题是,在比较字符串
值时使用了“==”运算符。。。您需要使用String#compareTo
(事实上,我不知道您为什么要编写自己的比较器,因为String#compareTo
就足够了).@andy你确定compareTo会给出tom在字符串中的要求吗?@Baadshahstring#compareTo
应该使用tom识别的示例字符串。但是,它不适用于“1”、“2”和“10”。