2016-12-16 44 views
0

的我有一對夫婦的ArrayList:改造2周的ArrayList

ArrayList的一個 - > [ 「52」, 「52」, 「52」, 「52」, 「67」, 「67」, ArrayList b - > [「1」,「4」,「5」,「6」,「3」,「4」,「5」,「10」]

]

我想要把它們轉化爲:在

的ArrayList - > [ 「52」, 「52」, 「67」, 「67」]

ArrayList的BT - > [ 「1」 ,「4 - 6」,「3 - 5」,「1 0「]

我知道如何讓b進入bt,但是我無法把頭圍進去。

Algorith製作b分成BT:

public static void main(String[] args) { 

    ArrayList<String> alist = new ArrayList<String>(); 
    alist.add("1"); 
    alist.add("4"); 
    alist.add("5"); 
    alist.add("6"); 
    alist.add("3"); 
    alist.add("4"); 
    alist.add("5");  
    alist.add("10"); 

    alist = groupByRange(alist); 

} 

static public ArrayList<String> groupByRange(ArrayList<String> alist) { 

    // ArrayList<String> to ArrayList<Integer> 
    ///////////////////////////////////////////////////////// 

    ArrayList<Integer> alist_int = new ArrayList<Integer>(); 
    for (String ident : alist) { 
     alist_int.add(Integer.parseInt(ident)); 
    } 

    // ArrayList<Integer> to int[] 
    ///////////////////////////////////////////////////////// 

    int[] arr = new int[alist_int.size()]; 

    for (int i = 0; i < arr.length; i++) { 
     arr[i] = alist_int.get(i); 
    } 

    // Grouping by range (return ArrayList<String>) 
    ///////////////////////////////////////////////////////// 

    int start, end; 
    end = start = arr[0]; 
    ArrayList<String> alist_res = new ArrayList<String>(); 
    for (int i = 1; i < arr.length; i++) { 
     if (arr[i] == (arr[i - 1] + 1)) { 
      end = arr[i]; 
     } else { 

      if (start == end) { 
       alist_res.add(String.valueOf(start)); 
      } else { 
       alist_res.add(String.valueOf(start) + " - " + String.valueOf(end)); 
      } 
      start = end = arr[i]; 
     } 
    } 

    if (start == end) { 
     alist_res.add(String.valueOf(start)); 
    } else { 
     alist_res.add(String.valueOf(start) + " - " + String.valueOf(end)); 
    } 

    for (String n : alist_res) { 
     System.out.println(n); 
    } 

    return alist_res; 
} 
+5

問題是:爲了編寫任何代碼,首先需要**清晰**關於您的需求。例如:什麼規則告訴你(52,52,52,52)應該減少到(52,52)?規則是否說:連續兩次相同的數字?或者:減少重複只發生兩次?我的意思是:你首先需要**清楚**指定**規則**來進行轉換。然後你開始思考「如何」。執行不明確的規則只會導致混亂和痛苦。 – GhostCat

+1

然後請編輯您的問題;不要開始把東西放入評論! – GhostCat

+0

我希望在我的例子中很清楚,但你是對的。我會試着解釋:52分與1,4,5和6分;因此我需要(52) - >(1),(52) - >(4-6),(67) - >(3- 5)和(67)→(10) –

回答

0

我有方法,您:

public List<String> groupByValue(List<String> listA) { 

    if (listA.isEmpty()) { 
     return Collections.emptyList(); 
    } 

    final List<String> result = new ArrayList<>(); 
    result.add(listA.get(0)); 

    for (int actualIndex = 1; actualIndex < listA.size(); actualIndex++) { 
     if (actualIndex + 1 < listA.size() - 1 && !listA.get(actualIndex + 1).equals(listA.get(actualIndex))) { 
      result.add(listA.get(actualIndex)); 
      actualIndex++; 
     } 
     if (actualIndex < listA.size() - 1 && !listA.get(actualIndex - 1).equals(listA.get(actualIndex))) { 
      result.add(listA.get(actualIndex)); 
     } 
     if (actualIndex + 1 == listA.size()) { 
      result.add(listA.get(actualIndex)); 
     } 
    } 

    return result; 
} 

這個方法有一個參數,就是您的輸入列表中。然後,我們chcek列表,接下來,我們從列表中添加第一個值。接下來我們檢查下一個值,最後得到結果,這意味着列表。

+0

它不起作用。該方法應該有2個參數(a和b),因爲數組bt的大小等於at。我測試過了,它不會像這樣工作。不管怎麼說,還是要謝謝你。 –

+0

好吧,也許你可以提供更多關於這種方法應該如何工作的細節?更多關於參數?更多關於規範? – MateuszW90

+0

我不認爲這是必要的。問題很簡單,但我恐怕沒有說清楚。對於那個很抱歉。我會很快編輯主帖子。 –