复杂的将行转换为列数组

时间:2013-04-02 08:01:06

标签: java arrays loops multidimensional-array

我收到了这些代码:

String[] s1={"Samsung Smarphone","20MB"};
            String[] s11={"Apple Smarphone","25MB"};

            String[] s2={"Samsung Smarphone","3 in"};
            String[] s22={"Apple Smarphone","6 in"};

            String[] s3={"Samsung Smarphone","3GB"};
            String[] s33={"Apple Smarphone","2 GB"};




            String[] s4={"Apple Smarphone","iphone1"};
            String[] s44={"Apple Smarphone","iphone2"};
            String[] s444={"Apple Smarphone","iphone3"};

            List<String[]> l1=new ArrayList<String[]>();
            l1.add(s1);
            l1.add(s11);

            List<String[]> l2=new ArrayList<String[]>();
            l2.add(s2);
            l2.add(s22);

            List<String[]> l3=new ArrayList<String[]>();
            l3.add(s3);
            l3.add(s33);

            List<String[]> l4=new ArrayList<String[]>();
            l4.add(s4);
            l4.add(s44);
            l4.add(s444);

            Vector<List<String[]>> myV=new Vector<List<String[]>>();
            myV.add(l1);
            myV.add(l2);
            myV.add(l3);
            myV.add(l4);


            List<String[]> resultL=new ArrayList<String[]>();


            String[] mainS={"Samsung Smarphone","Apple Smarphone","Apple Smarphone","Apple Smarphone"};
            for (int i=0; i<mainS.length; i++){


                String[] theRow=new String[myV.size()+1];

                for (int k=0; k<myV.size(); k++){
                    List<String[]> smallList=(List<String[]>)myV.elementAt(k);
                    String[][] small2DArr=new String[smallList.size()][2];
                    smallList.toArray(small2DArr);

                    String strMain=mainS[i];
                    int rows=small2DArr.length;



                    int cols=2;

                    for( int y=0; y<rows; y++)
                    {
                        for(int z=0; z<cols; z++){
                            String str=small2DArr[y][z];
                            if(strMain.equals(str))
                            {
                                theRow[0]=strMain;
                                theRow[k+1]=small2DArr[y][1];
                            }
                        }
                    }
                }
                resultL.add(theRow);
            }

            for(int u=0; u<resultL.size(); u++)
            {
                String[] myR=resultL.get(u);
                //int ddd=xxx.length;
                System.out.println("\n----------------\n");
                for (String s : myR)
                {
                    System.out.print(s +"\t");
                }

            }

结果是:

Samsung Smarphone   20MB    3 in    3GB null    
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone3 
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone3 
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone3

以上结果不正确。我想要这样的结果:

Samsung Smarphone   20MB    3 in    3GB null    
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone1 
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone2 
----------------

Apple Smarphone 25MB    6 in    2 GB    iphone3

你能帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

这里的主要问题是平等检查,if(strMain.equals(str))。由于所有三个智能手机代表相同的公司名称,您得到错误的值(以先到者为准)。
对于这类问题,最好不要根据公司名称(这里是苹果智能手机)进行检查。想想你将如何设计数据库。
如果您为相同的表示设计数据库,您永远不会使用公司名称作为主键吗?因为一家公司可以在市场上拥有多部手机。 我的建议是用豆而不是普通的字符串。 bean包含公司名称和id。覆盖bean的equals方法。如下所示,

class MyBean{
        private String company;
        private int id;
        public MyBean(int id, String company) {
            this.id = id;
            this.company = company;
        }

        @Override
        public boolean equals(Object obj) {
            return id == ((MyBean)obj).id;
        }

        @Override
        public String toString() {
            return company;
        }
    }

这只是一个例子。您可以按照自己的算法进行均衡。