2016-11-28 77 views
-3

我的代碼如下:排序基於在它的特定值的ArrayList與分組

import java.util.ArrayList; 

進口java.util.Arrays中; import java.util.List;

公共類排序{

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    List<String> theMenu = new ArrayList<String>(); 
    String[] Array1 = { 
      "M1", "Wine",  "2.50", 
       "M2", "Soft drink", "1.50", 
      "D1", "Fish",  "7.95", 
      "D2", "Veg chili", "6.70" 
    }; 
    theMenu.addAll(Arrays.asList(Array1)); 

    String[] temp1 = new String[3]; 
    String[] temp2 = new String[3]; 

    for (int i = 0; i < theMenu.size(); i+=3) { 
     for (int j = i + 3; j < theMenu.size(); j+=3) { 
     if (i < theMenu.size() - 3) { 
     if (theMenu.get(i).compareTo(theMenu.get(i + 3)) > 0) { 


      temp1[0] = theMenu.get(i); 
      temp1[1] = theMenu.get(i + 1); 
      temp1[2] = theMenu.get(i + 2); 

      temp2[0] = theMenu.get(j); 
      temp2[1] = theMenu.get(j+1); 
      temp2[2] = theMenu.get(j+2); 

      theMenu.remove(j + 2); 
      theMenu.remove(j + 1); 
      theMenu.remove(j); 
      theMenu.remove(i + 2); 
      theMenu.remove(i + 1); 
      theMenu.remove(i); 

      theMenu.add(i, temp2[0]); 
      theMenu.add(i + 1, temp2[1]); 
      theMenu.add(i + 2, temp2[2]); 

      theMenu.add(j, temp1[0]); 
      theMenu.add(j + 1, temp1[1]); 
      theMenu.add(j + 2, temp1[2]); 


     } 
     } 

     } 

    } 

    System.out.println(theMenu); 

} 

}

我要排序的順序D1,D2,M1,M2,M3的ArrayList中,同時保持其各自的項目和價格與IDS。我不允許更改存儲方法,即使用自己的ID和名稱以及價格創建另一類物品。我怎樣才能重新排列它,以便它的形式:

{"D1" , "Fish", "7.95" 
"D2" , "Veg chili", "6.70", 
"M1" , "Wine", "2.50", 
"M2", "Soft drink", "1.50" 
} 

在ArrayList中。無論我們在arrayList中存儲多少個項目,這應該工作。我的代碼產生以下輸出:

[M1, Wine, 2.50, M2, Soft drink, 1.50, D1, Fish, 7.95, D2, Veg chili, 6.70] 

注:忘記陣列中的新生產線,我只需要索引整理出來。誰能幫我這個?

+0

問題描述是如此怪異,它要麼做作業或面試問題。儘管如此,選擇自己喜歡的排序算法並不需要很難,只需用三元組對待數組列表即可。 – Kayaman

回答

-1

首先,您有一個實體 - 產品,其中包含ID,名稱和價格。 總是爲您的應用程序中的每個實體創建新的類。 例如:

public class MyObject implements Comparable 
{ 
    private String id; 
    private String name; 
    private double price; 

    public MyObject(String id, String name, double price) 
    { 
    this.id = id; 
    this.name = name; 
    this.price = price; 
    } 

    public String getId() 
    { 
    return id; 
    } 

    @Override 
    public int compareTo(Object o) 
    { 
    MyObject receivedObject = (MyObject) o; 
    return this.id.compareTo(receivedObject.getId()); 
    } 

    @Override 
    public String toString() 
    { 
    return "MyObject{" + 
     "id='" + id + '\'' + 
     ", name='" + name + '\'' + 
     ", price=" + price + 
     '}'; 
    } 
} 

我使用「implements Comparable」來實現簡單的寫入排序。當我們實現這個interphace我們必須重寫

public int compareTo(Object o) 
{ 
    MyObject receivedObject = (MyObject) o; 
    return this.id.compareTo(receivedObject.getId()); 
} 

這種方法比較兩個對象,說哪個對象「做大」。在你的情況下,我們只需要通過Ids進行比較。

現在你有實體能夠相互比較。檢查它:

public class Processing 
{ 
    public static void main(String[] argc) { 
    List<MyObject> list = new ArrayList<>(); 
    list.add(new MyObject("M1", "Wine", 2.50)); 
    list.add(new MyObject("M2", "Soft drink", 1.50)); 
    list.add(new MyObject("D1", "Fish", 7.95)); 
    list.add(new MyObject("D2", "Veg chili", 6.70)); 

    System.out.println(list); 

    Collections.sort(list); 
    System.out.println(list); 
    } 
} 

首頁輸出:

MyObject{id='M1', name='Wine', price=2.5}, 
MyObject{id='M2', name='Soft drink', price=1.5}, 
MyObject{id='D1', name='Fish', price=7.95}, 
MyObject{id='D2', name='Veg chili', price=6.7} 

第二輸出:

MyObject{id='D1', name='Fish', price=7.95}, 
MyObject{id='D2', name='Veg chili', price=6.7}, 
MyObject{id='M1', name='Wine', price=2.5}, 
MyObject{id='M2', name='Soft drink', price=1.5} 
+0

他說他不能組成一個類來包含信息。 – Kayaman