如何在Java中对表数据结构中的数据进行排序?

时间:2010-12-26 03:35:56

标签: java sorting data-structures

我需要根据表数据结构的第三列对数据进行排序。我尝试根据以下question的答案。但我的排序不起作用。请帮帮我。 这是我的代码。

Object[] data = new Object[y];
            rst.beforeFirst();
            while (rst.next()) {
                int p_id = Integer.parseInt(rst.getString(1));
                String sw2 = "select sum(quantity) from tbl_order_detail where product_id=" + p_id;
                rst1 = stmt1.executeQuery(sw2);
                rst1.next();
                String sw3 = "select max(order_date) from tbl_order where tbl_order.`Order_ID` in (select tbl_order_detail.`Order_ID` from tbl_order_detail where product_id=" + p_id + ")";
                rst2 = stmt2.executeQuery(sw3);
                rst2.next();
                data[i] = new Object[]{new String(rst.getString(2)), new String(rst.getString(3)), new Integer(rst1.getString(1)), new String(rst2.getString(1))};
                i++;
            }
            ColumnComparator cc = new ColumnComparator(2);
            Arrays.sort(data, cc);
            if (i == 0) {
                table.addCell("");
                table.addCell("");
                table.addCell("");
                table.addCell("");
            } else {
                for (int j = 0; j < y; j++) {
                    Object[] theRow = (Object[]) data[j];
                    table.addCell((String) theRow[0]);
                    table.addCell((String) theRow[1]);
                    table.addCell((String) theRow[2]);
                    table.addCell((String) theRow[3]);
                }

预期输出样本:

Product_code  Product_name  Quantity Order_date  
FK            Cake          3000      2010-12-09  
CK            Jelly         100      2010-09-23  
F             juice         30       2010-12-09  

但我得到的是:

Product_code  Product_name  Quantity Order_date  
CK            Jelly         100      2010-09-23  
F             juice         30       2010-12-09  
FK            Cake          3000      2010-12-09  

2 个答案:

答案 0 :(得分:4)

你有太多的事情要发生在这里。您将数据库访问和UI混合到一个方法中。我将这些问题分开了。

我还建议让数据库进行排序。将ORDER BY添加到SELECT中,让数据库完成工作。

我将SELECT中的数据映射到一个具有Comparator进行排序的对象。将ResultSet加载到该对象的List中;你可以用你的所有愿望。

答案 1 :(得分:1)

  1. 问题是数据还是比较器?在另一篇文章中,您将展示如何使用硬编码数据创建简单的测试程序。您在此处发布的代码对我们没有帮助,因为我们无法访问您的数据库,也不知道您是否正确访问数据。

  2. 输出看起来像按“String”值按升序排序。所以它确实看起来像数据是错误的。我不知道问题是什么,因为看起来你正在为数组添加一个Integer值。

  3. 您希望按金额降序输出,因此您需要设置Comparator属性来执行此操作。

  4. 无论如何要确保我的Comparator没有问题,我创建了一个简单的测试:

    import java.util.*;
    
    public class SortSIJ
    {
        public static void main(String args[])
        {
            Object[] data = new Object[3];
            data[0] = new Object[] {"CK",  "Jelly", new Integer(100), "2010-09-23"};
            data[1] = new Object[] {"FK", "Cake", new Integer(3000), "2010-12-09"};
            data[2] = new Object[] {"F", "juice", new Integer(30), "2010-12-09"};
    
            ColumnComparator cc = new ColumnComparator(2);
            cc.setAscending( false );
    
            Arrays.sort(data, cc);
    
            for (Object row: data)
            {
                Object[] theRow = (Object[])row;
                System.out.println( Arrays.asList(theRow) );
            }
        }
    }
    

    输出看起来很好。我可以建议您修改ColumnComparator以添加以下代码行来验证正在排序的Object类型。

    System.out.println(o1.getClass());
    

    当我这样做时,我得到以下输出:

    class java.lang.Integer  
    class java.lang.Integer  
    [FK, Cake, 3000, 2010-12-09]  
    [CK, Jelly, 100, 2010-09-23]  
    [F, juice, 30, 2010-12-09]