2015-06-24 2 views
0

У меня есть два ArrayList х String типа и хочу смешать их следующим образом:Объединение два ArrayLists типа строки в Java

SPK = [A,A,A,B,A,A,A,A,A,B] и

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

Мне нужно создать некоторые String в других ArrayList, как показано ниже:

SPK_DA = [ofmAsdAsdAB, sdBA, sdAsdAsdAsdAsdAB]

в этом наборе Мне нужно сопоставить предыдущие аналогичные элементы, прежде чем поворачивать (от A до B) в массиве SPK.

Я написал программу, но добавляет один дополнительный 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] 

Когда я использую для цикла это происходит, что он создает больше СОУ ....

+0

Я не уверен, что вы подразумеваете под sdA ... –

+0

@LanguidSquid SPK - это динамики и DA - диалоговые действия для каждого высказывания; и sd показывает, что диалог действует так, как говорил выступающий A. – user3147590

+0

Я бы предложил разместить хорошо отформатированный компилируемый код. Гораздо легче понять вашу проблему, если ваш код легко читается, и если можно легко воспроизвести проблему локально. И, честно говоря, я с трудом выясняю, как вы создаете SPK_A из этих двух массивов. – Fox

ответ

0
  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); 

    } 

Приведенный выше код может дать мне ответ, но я думаю, что это очень неэффективно. Есть ли идея сделать его более эффективным?

Смежные вопросы