BO里需要对List的对象进行排序,我写了一个比较器
public class portfolioVOComparator implements Comparator<portfolioVO>
前些天只是要求对对象进行一个字段的简单比较,直接用的String与String的比较
o1.getSymbolCode().compareTo(o2.getSymbolCode())
最后用Collections.sort(list,new portfolioVOComparator());,在本版和服务器上都得到正确的排序。
这几天又加了些其他的排序要求
本地我们这几台机器都是好的,但是在服务器上就是乱的,本地和服务器用的都是jdk1.6
感觉是在服务器上Collections.sort(list,new portfolioVOComparator());根本就没有起作用,但是在portfolioVOComparator里打了log,log也都打出来了
找了一天,也没找不具体是哪里引起的这个问题
大家帮忙分析一下,能使哪里的问题引起这个问题呢
或是有其他的排序方法吗?譬如说apach.common下有没有好的排序方法
谢谢

解决方案 »

  1.   

    旧的比较器
    public class PortfolioVOComparator implements Comparator<PortfolioVO>{ private List<String> portfolioExchangeSort = new ArrayList<String>();  

    @Override
    public int compare(PortfolioVO o1, PortfolioVO o2) {
    OrderUtils orderUtils = (OrderUtils)BeanFactory.getBean("orderUtils");
    portfolioExchangeSort = orderUtils.getPortfolioExchangeSort();
    int o1Index = portfolioExchangeSort.indexOf(o1.getExchangeCode());
    int o2Index = portfolioExchangeSort.indexOf(o2.getExchangeCode());
    if (o1Index > o2Index)
    return 1;
    else if (o1Index < o2Index)
    return -1;
    else 
    return o1.getSymbolCode().compareTo(o2.getSymbolCode());
    }

    }
    新的比较器public class PortfolioVOComparator implements Comparator<PortfolioVO>{ private List<String> portfolioExchangeSort = new ArrayList<String>();  

    @Override
    public int compare(PortfolioVO o1, PortfolioVO o2) {
    OrderUtils orderUtils = (OrderUtils)BeanFactory.getBean("orderUtils");
    portfolioExchangeSort = orderUtils.getPortfolioExchangeSort();
    int o1Index = portfolioExchangeSort.indexOf(o1.getExchangeCode());
    int o2Index = portfolioExchangeSort.indexOf(o2.getExchangeCode());
    if (o1Index > o2Index) {
    return 1;
    }
    else if (o1Index < o2Index){
    return -1;
    }
    else{
    String o1SymbolCode = StringUtils.trim(o1.getSymbolCode());
    String o2SymbolCode = StringUtils.trim(o2.getSymbolCode());
    if (StringUtils.isNumeric(o1SymbolCode)
    && StringUtils.isNumeric(o2SymbolCode)) {
    int o1SymbolCodeNum = Integer.parseInt(o1SymbolCode);
    int o2SymbolCodeNum = Integer.parseInt(o2SymbolCode);
    if (o1SymbolCodeNum > o2SymbolCodeNum) {
    return 1;
    } else if (o1SymbolCodeNum > o2SymbolCodeNum) {
    return -1;
    } else
    return 0;
    } else {
    return o1.getSymbolCode().compareTo(o2.getSymbolCode());
    }
    }
    }

    }
      

  2.   

    FUCK,找到问题了
     if (o1SymbolCodeNum > o2SymbolCodeNum) {
                        return 1;
                    } else if (o1SymbolCodeNum > o2SymbolCodeNum) {
                        return -1;
                    }
    判断条件写错了
    但是为啥本地机器都是好的呢,不能解释
    谁来,散分了
      

  3.   


    if (o1Index != o2Index)
       return o1Index - o2Index;
    else 
       return o1.getSymbolCode().compareTo(o2.getSymbolCode());
    建议楼主这样写,这样写就不会出现判断问题了。而且代码更简洁。。