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());
        }
    });
}

 

posted @ 2025-07-17 09:36  山䂥进城  阅读(10)  评论(0)    收藏  举报