JAVA Collections.sort方法在SSH三大框架中使用中的问题

发布时间:2025-09-03 00:30:11 作者:益华网络 来源:undefined 浏览量(0) 点赞(0)
摘要:最近,一同学在开发中遇到了SSH三大框架中使用到了Collections.sort方法。然而,他开发环境中的JDK 是1.7.0_64,网站部署的JDK版本是1.7.0_80,他通过开发环境

      最近,一同学在开发中遇到了SSH三大框架中使用到了Collections.sort方法。然而,他开发环境中的JDK

是1.7.0_64,网站部署的JDK版本是1.7.0_80,他通过开发环境中产生的.class直接去更新网站部署环境中的.class

文件后,程序相关功能模块执行到Collections.sort不继续执行也不报错,而前台ajax因此取不到数据。

类似的远程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public String analysisBillByIllName(){
if(!"".equals(queryItem)){         
List<IllnessPrescriptionFrequency> ipflist = ipfs.findByIllName(queryItem);
List<BillView> bvlist = new ArrayList<BillView>();
if(ipflist.size()!=0){             
int sumfreq = 0;
for(IllnessPrescriptionFrequency inst:ipflist){
if(!"".equals(inst.getId().getBillIds())){                     
String[] bids = inst.getId().getBillIds().split("\\$");
for(int i=0;i<bids.length;i++){
BillView bv = new BillView();
bv.setBillId(Integer.parseInt(bids[i]));
bv.setFrequency(inst.getId().getPrescriptionFreequency());
sumfreq +=inst.getId().getPrescriptionFreequency();
bvlist.add(bv);
}
}
}
for(int j=0;j<bvlist.size();j++){
for(int k=j+1;k<bvlist.size() -1;k++){
if(bvlist.get(j).getBillId().equals(bvlist.get(k).getBillId())){
bvlist.get(j).setFrequency(bvlist.get(j).getFrequency()+bvlist.get(k).getFrequency());
bvlist.remove(k);
}
}
}
System.out.println(">>>>>>>>>>bvlist for2 ipflist:"+bvlist.size());
final int sumRatio = sumfreq; 
Collections.sort(bvlist,new Comparator<BillView>(){//list sort
public int compare(BillView bv1,BillView bv2){
if(bv1.getFrequency()<bv2.getFrequency()){
return 1;
}
if(bv1.getFrequency()==bv2.getFrequency()){
return 0;
}
return -1;
}
});
System.out.println(">>>>>>>>>>bvlist Collections:"+bvlist.size());
for(BillView bv:bvlist){
Bill qb = bills.findById(bv.getBillId());
bv.setBillName(qb.getBillName());
float divd = bv.getFrequency()/sumRatio;
bv.setUseageRatio(divd);
bv.setIllName(queryItem);
}
flag="data";
jsonArray = JSONArray.fromObject(bvlist);
System.out.println(jsonArray.toString());
return SUCCESS;
}else{
flag="none";
return SUCCESS;
}
}else{
return ERROR;
}
}

如上程序通过AJAX异步访问,在开发环境中能正常执行;但是使用低版本的JDK编译后的.class文件直接去替换高版本下

的同名.class文件类,程序执行到:

1
System.out.println(">>>>>>>>>>bvlist for2 ipflist:"+bvlist.size());

而下边的方法不执行也不报错:

1
2
3
4
5
6
7
8
9
10
11
Collections.sort(bvlist,new Comparator<BillView>(){//list sort
public int compare(BillView bv1,BillView bv2){
if(bv1.getFrequency()<bv2.getFrequency()){
return 1;
}
if(bv1.getFrequency()==bv2.getFrequency()){
return 0;
}
return -1;
}
});

程序无法执行Collections.sort,不能执行到函数返回语句,AJAX异步访问获取不到数据,导致前台报错获取数据失败。

    在问题排查过程中,经历了如下过程:

    1、开发环境是windows,网站部署环境是centos6.8,前后重新编译了网站代码,并且重新部署了centos上的网站,

问题还是不执行Collections.sort;

    2、怀疑是阿里云环境安全的限制,关闭了主机防火墙,但是Collections.sort方法还是不执行也不报错;

    3、单独编辑测试Collections.sort的java类分别在windows和centos环境下编译执行,发现Collections.sort在windows和centos上均可以执行,测试程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class BillView{
private Integer billId;
private String billName;
private String illName;
private int frequency;
private float useageRatio;
public Integer getBillId() {
return billId;
}
public void setBillId(Integer billId) {
this.billId = billId;
}
public String getBillName() {
return billName;
}
public void setBillName(String billName) {
this.billName = billName;
}
public String getIllName() {
return illName;
}
public void setIllName(String illName) {
this.illName = illName;
}
public int getFrequency() {
return frequency;
}
public void setFrequency(int frequency) {
this.frequency = frequency;
}
public float getUseageRatio() {
return useageRatio;
}
public void setUseageRatio(float useageRatio) {
this.useageRatio = useageRatio;
}
public BillView() {
}
public BillView(Integer billId, String billName, String illName,
int frequency, float useageRatio) {
super();
this.billId = billId;
this.billName = billName;
this.illName = illName;
this.frequency = frequency;
this.useageRatio = useageRatio;
}
}
public class Test {
public static void main(String[] args){
List<BillView> bvlist = new ArrayList<BillView>();
BillView bv1 = new BillView(1, "苹果", null, 1, 0); 
BillView bv2 = new BillView(2, "香蕉", null, 4, 0);
BillView bv3 = new BillView(3, "橘子", null, 2, 0);
BillView bv4 = new BillView(4, "梨", null, 9, 0);
bvlist.add(bv1);
bvlist.add(bv2);
bvlist.add(bv3);
bvlist.add(bv4);
Collections.sort(bvlist,new Comparator<BillView>(){//list sort
public int compare(BillView bv1,BillView bv2){
if(bv1.getFrequency()<bv2.getFrequency()){
return 1;
}
if(bv1.getFrequency()==bv2.getFrequency()){
return 0;
}
return -1;
}
});
System.out.println("collections --->"+bvlist.size());
for(BillView bv:bvlist){
System.out.println("  "+bv.getBillName()+"  "+bv.getFrequency());
}
}
}

  4、查看windows和centos环境下的JDK版本,发现两边环境JDK版本不一致,windows环境下jdk版本是:1.7.0_64,而

centos环境下JDK版本是1.7.0_80;将windows环境下JDK版本更新到1.7.0_80,并指定开发工具myeclipse的Java编译使用

JDK1.7.0_80版本,重新编译网站源码,在centos上发布网站,发现如下程序顺利执行:

1
2
3
4
5
6
7
8
9
10
11
Collections.sort(bvlist,new Comparator<BillView>(){//list sort
public int compare(BillView bv1,BillView bv2){
if(bv1.getFrequency()<bv2.getFrequency()){
return 1;
}
if(bv1.getFrequency()==bv2.getFrequency()){
return 0;
}
return -1;
}
});

  到此问题得到了解决!

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!