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在字符串中的要求吗?@Baadshah
string#compareTo
应该使用tom识别的示例字符串。但是,它不适用于“1”、“2”和“10”。