我在java中面临一个排序问题 . 我有一个事务bean列表,我的要求是基于不同的属性进行排序,我能够做到 . 现在的问题是,我在bean中称为“ trnAmt ”的属性,它具有借方和贷方金额 . 我需要在debitAmt和creditAmt上进行排序 . 金额类型将决定bean其他属性 trnType 属性,如果trnType是'C'则表示它是借方金额的's a debit amount or if trnType is ' D ' means it' .

这是我的 beans 子

public class CardTransaction {

    private String trnType;
    private Date trnBookingDate;
    private String trnAmt;
    private List trnDesc;



---getter n setter method..
}

Here is my method which is failing .

public void applyColumnSorting(final List transDtlsList, final Sorting sorting) {
        final String sortOrder = sorting.getSortOrder();
        final String column = sorting.getSortCol();
        if ("DT".equalsIgnoreCase(column)) {

            Collections.sort(transDtlsList, new Comparator() {
                private final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

                @Override
                public int compare(final CardTransaction s, final CardTransaction d) {
                    Date sdate = null, ddate = null;
                    sdate = s.getTrnBookingDate();
                    ddate = d.getTrnBookingDate();
                    int ret = 0;
                    if ("A".equalsIgnoreCase(sortOrder)) {
                        ret = ddate.before(sdate) ? 1 : -1;
                    } else {
                        ret = sdate.before(ddate) ? 1 : -1;
                    }
                    return ret;
                }
            });
        } else if ("NR".equalsIgnoreCase(column)) {
            Collections.sort(transDtlsList, new Comparator() {

                @Override
                public int compare(final CardTransaction s, final CardTransaction d) {
                    String sDesc = StringUtils.arrayToDelimitedString(s.getTrnDesc().toArray(), "");
                    String dDesc = StringUtils.arrayToDelimitedString(d.getTrnDesc().toArray(), "");

                    int ret = 0;
                    if ("A".equalsIgnoreCase(sortOrder)) {
                        ret = sDesc.compareTo(dDesc);
                    } else {
                        ret = dDesc.compareTo(sDesc);
                    }
                    return ret;
                }
            });
        } else if ("CT".equalsIgnoreCase(column)) { // Sorting for credit amt.
            Collections.sort(transDtlsList, new Comparator() {

                @Override
                public int compare(final CardTransaction s, final CardTransaction d) {
                    int ret = 0;
                    if(s.getTrnType().equals("C")  ) {
                        final BigDecimal samt =
                            new BigDecimal(org.apache.commons.lang.StringUtils.isNotBlank(s.getOriginalAmt()) ? s.getOriginalAmt() : "0.00");
                        final BigDecimal damt =
                            new BigDecimal(org.apache.commons.lang.StringUtils.isNotBlank(d.getOriginalAmt()) ? d.getOriginalAmt() : "0.00");
                        if ("A".equalsIgnoreCase(sortOrder)) {
                            ret = samt.compareTo(damt);
                        } else {
                            ret = damt.compareTo(samt);
                        }
                        return ret;
                        }
                        return ret;

                }
            });
        }else if ("DA".equalsIgnoreCase(column)) { //sorting for debit amount
            Collections.sort(transDtlsList, new Comparator() {

                @Override
                public int compare(final CardTransaction s, final CardTransaction d) {

                    int ret = 0;
                    if(s.getTrnType().equals("D")  ) {
                    final BigDecimal samt =
                        new BigDecimal(org.apache.commons.lang.StringUtils.isNotBlank(s.getOriginalAmt()) ? s.getOriginalAmt() : "0.00");
                    final BigDecimal damt =
                        new BigDecimal(org.apache.commons.lang.StringUtils.isNotBlank(d.getOriginalAmt()) ? d.getOriginalAmt() : "0.00");
                    if ("A".equalsIgnoreCase(sortOrder)) {
                        ret = samt.compareTo(damt);
                    } else {
                        ret = damt.compareTo(samt);
                    }
                    return ret;
                    }
                    return ret;
                }
            });
        }

    }