简体   繁体   English

在Java中合并两个String类型的ArrayList

[英]Merging two ArrayLists of type String in Java

I have two ArrayList s of String type and want to mix them as follows: 我有两个String类型的ArrayList ,并想将它们混合如下:

SPK = [A,A,A,B,A,A,A,A,A,B] and SPK = [A,A,A,B,A,A,A,A,A,B]

DA= [ofm,sd,sd,sd,sd,sd,sd,sd,sd,sv]

I need to create some String in other ArrayList as below: 我需要在其他ArrayList创建一些String ,如下所示:

SPK_DA = [ofmAsdAsdAB, sdBA, sdAsdAsdAsdAsdAB]

in this set I need to equate previous similar elements before turning (from A to B) occur in SPK array. 在这个集合中,在SPK数组中发生从A到B的转向之前,我需要将之前的相似元素等价。

I wrote a program but it adds one extra sdA (I don't know why I can't do such a simple thing). 我写了一个程序,但是它增加了一个额外的sdA(我不知道为什么我不能做这么简单的事情)。

            for (int i=0; i <SPK.size()-1; i++){

            if (SPK.get(i)==SPK.get(i+1) && (i+1)<= SPK.size()){

            speakerChain = DA.get(i)+SPK.get(i);
            speakerChain1=DA.get(i+1)+SPK.get(i+1);
               SPKTrace.add(speakerChain);
               SPKTrace.add(speakerChain1);


            }else if (SPK.get(i)!=SPK.get(i+1)){

                if (SPKTrace.size()!=0){

            SPKTrace.add(SPK.get(i+1));
           //SPKString = removeDuplicates (SPKTrace);
           String S1 = arrayTostring(SPKTrace);
            SPKResource.add(S1);
            SPKTrace.clear();
                }else {
                    SPKTrace.add(DA.get(i)+SPK.get(i)+SPK.get(i+1));
                       //SPKString = removeDuplicates (SPKTrace);
                       String S1 = arrayTostring(SPKTrace);
                        SPKResource.add(S1);
                        SPKTrace.clear();

                }

            }

        }


         }
      }
System.out.println(SPKResource.toString());


My Output:   [ofmAsdAsdAsdAB, sdBA, sdAsdAsdAsdAsdAsdAsdAsdAB]

When I use for loop it happens that it creates more sdAs.... 当我使用for循环时,它会创建更多的sdA。

            Indicies.add(0);
            for (int i = 0; i < SPK.size() - 1; i++) {

                if (SPK.get(i) != SPK.get(i + 1)) {

                    Indicies.add(i + 1);

                }

            }
            for (int i = 0; i < Indicies.size() - 1; i++) {

                Count.add(Indicies.get(i + 1) - Indicies.get(i));
            }
            Count.add((SPK.size() - Indicies.get(Indicies.size() -   1)));

            System.out.println("count:" + Count);
            int counter = 0;
            int newIndex =0;
            for (int j = 1; j <= Count.size(); j++) {

                String element = "";


                for (int kk = 0; kk < (Count.get(j-1)); kk++) {
                    element = element + (DA.get(kk+newIndex) + SPK.get(kk+newIndex));
                }
                 newIndex = newIndex+Count.get(j-1);


                if (element.endsWith("A")){
                    SPKResource.add(element+"B");
                } else if (element.endsWith("B")){
                    SPKResource.add(element+"A");
                }

            }

        }

    }
    for (String S:SPKResource){
        System.out.println(SPKResource);

    }

The above code can give me the answer but I think it is quite inefficient. 上面的代码可以给我答案,但是我认为效率很低。 Is there any idea to make it more efficient? 有什么想法可以提高效率吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM