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

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

4

3 回答 3

0

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

人们对带有数字的字符串进行排序的方式与软件不同。

使用Alphanum 算法

在上面的链接中下载 AlphanumComparator.java并使用它。

于 2013-04-11T15:31:40.987 回答
0

我也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);
于 2013-04-11T17:29:40.647 回答
0

我认为问题是

ListHandler<List<String>>

而不是 java 排序算法,请查看 Gwt 示例http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellTable,它对地址进行了精美的排序,并且代码使用非常简单的比较。查看用于排序地址的示例 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());
  }
});
于 2013-04-11T17:54:42.263 回答