NC/NCC中数据VO排序
自己写的VO排序方法,参考使用
//NC6X及以前版本 vo数据排序,fldAsc示例: fld1,fld2:desc,fld3:asc,fld4:d
public static <T extends CircularlyAccessibleValueObject> void voSort(
List<T> volist, final String... fldAsc) throws BusinessException {
if (volist.isEmpty() || volist.size() == 1)
return;
if (fldAsc == null || fldAsc.length == 0)
return;
Collections.sort(volist, new Comparator<T>() {
public int compare(T o1, T o2) {
Object one = null;
Object two = null;
boolean isAsc = true;// 从小到大
for (String fldw : fldAsc) {
if (fldw == null || fldw.length() == 0)
continue;
String[] fldm = fldw.toLowerCase().trim().split("\\s+");
String fld = fldm[0];
isAsc = true;
if (fldm.length > 1 && fldm[1].startsWith("d"))
isAsc = false;// 从大到小
one = o1.getAttributeValue(fld);
two = o2.getAttributeValue(fld);
if (one == null && two == null)
continue;
if (one == null || two == null)
break;
if (!one.equals(two))
break;
}
if (one == null && two == null) {
return 0;
} else if (one == null) {
if (isAsc)
return -1;
return 1;
} else if (two == null) {
if (isAsc)
return 1;
return -1;
} else if (one.equals(two)) {
return 0;
} else if (one instanceof Number) {
Double n1 = ((Number) one).doubleValue();
Double n2 = ((Number) two).doubleValue();
if (isAsc)
return n1.compareTo(n2);
else
return n2.compareTo(n1);
} else if (isAsc) {
return one.toString().compareTo(two.toString());
} else {
return two.toString().compareTo(one.toString());
}
}
});
}
//NCC及以后版本,vo数据排序,fldAsc示例: fld1,fld2:desc,fld3:asc,fld4:d
public static <T extends CircularlyAccessibleValueObject> void voSort(List<T> volist, String... fldAsc) throws BusinessException {
if (volist.isEmpty() || volist.size() == 1 || fldAsc == null || fldAsc.length == 0) return;
volist.sort((o1, o2) -> {
Object one = null;
Object two = null;
boolean isAsc = true;//从小到大
for (String fldw : fldAsc) {
if (fldw == null || fldw.length() == 0) continue;
String[] fldm = fldw.toLowerCase().trim().split("\\s+");
String fld = fldm[0];
isAsc = true;
if (fldm.length > 1 && fldm[1].startsWith("d")) isAsc = false;//从大到小
one = o1.getAttributeValue(fld);
two = o2.getAttributeValue(fld);
if (one == null && two == null) continue;
if (one == null || two == null) break;
if (!one.equals(two)) break;
}
if (one == null && two == null) {
return 0;
} else if (one == null) {
if (isAsc) return -1;
return 1;
} else if (two == null) {
if (isAsc) return 1;
return -1;
} else if (one.equals(two)) {
return 0;
} else if (one instanceof Number) {
Double n1 = ((Number) one).doubleValue();
Double n2 = ((Number) two).doubleValue();
if (isAsc) return n1.compareTo(n2);
else return n2.compareTo(n1);
} else if (isAsc) {
return one.toString().compareTo(two.toString());
} else {
return two.toString().compareTo(one.toString());
}
});
}
欢迎好评!