GWT,ListHandler <list <string>&gt; columnSortHandler未正确排序</list <string>

时间:2013-04-11 15:02:29

标签: java gwt sorting celltable

我收到了这些代码:

           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和闪光灯

上面的代码有什么问题吗?

3 个答案:

答案 0 :(得分:0)

正如网站的作者所说,java sorting algorithm基于ASCII。它永远不会像人类想象的那样起作用。 :)粗鲁但事实。

人们使用与软件不同的数字对字符串进行排序。

使用The Alphanum Algorithm

在上面的链接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());
  }
});