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下有没有好的排序方法
谢谢
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下有没有好的排序方法
谢谢
解决方案 »
- 代码注入求助???
- Java 數組中元素的比較問題!!
- 关于Tomcat连接数据库的,请高手帮帮忙
- 请教 ejb 3 中 一对多的问题
- 哪里有这个包client
- osb中javabean如何调用jms协议的proxy
- 对于一些少见字,数据库里显示是中文,但是读出来就不正常,请问有什么方法处理
- Struts、Struts+hibernate和EJB这三种技术,分别适合开发什么样的系统,如何选择呢?
- 今天打开电脑后,然后打开JDK(CHM)文档,一看发现字体怎么都变小了(太小了看不清楚),不知道怎么回事的?帮帮我
- 那有WebLogic8.1中文版下载
- 求助:怎么获取新浪的CONSUMER_KEY 和CONSUMER_SECRET
- Unknown column 'sr.listid' in 'where clause' 求高人指点
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());
}
}
}
}
if (o1SymbolCodeNum > o2SymbolCodeNum) {
return 1;
} else if (o1SymbolCodeNum > o2SymbolCodeNum) {
return -1;
}
判断条件写错了
但是为啥本地机器都是好的呢,不能解释
谁来,散分了
if (o1Index != o2Index)
return o1Index - o2Index;
else
return o1.getSymbolCode().compareTo(o2.getSymbolCode());
建议楼主这样写,这样写就不会出现判断问题了。而且代码更简洁。。