2012-04-16 37 views
2

您好我現在有4個陣列的所有持不同的數據我所遇到的問題是,我要排序的陣列中的一個字母通常我只會做這樣Java的多組排序

class IgnoreCaseComparator implements Comparator<String> { 
    public int compare(String strA, String strB) { 
     return strA.compareToIgnoreCase(strB); 
    } 
} 
IgnoreCaseComparator icc = new IgnoreCaseComparator(); 
java.util.Collections.sort(ARRAY,icc); 

在哪裏ARRAY將是我想按字母順序排列的數組,但是我需要將數組排序在一起。

因此,例如,可以說我的陣列看起來像這樣

Pet Array: [Dog, Cat, Bird] 
Owner Array: [Jim, Kyle, Joe] 
Friend Array: [Jake, Jim, John] 
Cat Array: [false, true, false] 

,我想基於PET陣列我的輸出應該是這樣的,所有的第三值現在是第一,第一值進行排序現在是第三個(這是大大超過我的簡化陣列實際含有的投入千)

Pet Array: [Bird, Cat, Dog] 
Owner Array: [Joe, Kyle, Jim] 
Friend Array: [John, Jim, Jake] 
Cat Array: [false, true, false] 

是否有一個簡單的方法來做到這一點,我可以排序一個數組,並有其他人效仿。感謝您對此問題的任何幫助。

===編輯===

比我的解決辦法是稍有不同,因爲我做了一個小讀檢查答案其他是完美的我只有一個稍微不同的返回線在compareTo方法

class Entity implements Comparable<Entity> { 
     String Pet; 
     String Owner; 
     String Friend; 
     int Cat; 

     Entity(String Pet, String Owner, String Friend, int Cat) { 
      this.Pet = Pet; 
      this.Owner = Owner; 
      this.Friend = Friend; 
      this.Cat = Cat; 
     } 

     @Override 
     public int compareTo(Entity other) { 
      return this.Pet.compareToIgnoreCase(other.Pet); 
     } 
    } 
+0

看看[這個問題](http://stackoverflow.com/questions/10081242/sort-javascript-array-in-object-maintaining-key/10081290)了。 – MarioDS 2012-04-16 22:22:30

回答

4

你可以聲明對象:

class Entity implements Comparable<Entity> { 
    Pet pet; 
    Person owner; 
    Friend friend; 
    boolean cat; 

    Entity(Pet pet, Person owner, Friend friend, boolean cat) { 
     this.pet = pet; 
     this.owner = owner; 
     this.friend = friend; 
     this.cat = cat; 
    } 

    public int compareTo(Entity b) { 
     return pet.getName().compareToIgnoreCase(b.pet.getName()); 
    } 
} 

然後建立一個數組或這些對象的列表。還有那種。

Entity[] array = new Entity[pets.length]; 
for (int i = 0; i < pets.length) { 
    array[i] = new Entity(pets[i], owners[i], friends[i], cats[i]); 
} 
Arrays.sort(array); 

之後,您可以將其拆分回數組。

for (int i = 0; i < pets.length) { 
    pets[i] = array[i].pet; 
    owners[i] = array[i].owner; 
    ... 
} 
+0

你能告訴我如何將數組添加到對象,然後取回他們我不完全理解 – user577732 2012-04-16 22:41:29

+0

認爲我想從這個線程會嘗試你的suggession在第二個謝謝http://www.dreamincode。 net/forums/topic/37594-create-an-object-array/ – user577732 2012-04-16 22:48:13

+0

查看我的更新 - 我添加了更多代碼。 – 2012-04-16 22:57:10

4
  1. 您可以創建一個class Tuple保存爲字段:petownerfriendcat - 用每個的相關類型。
  2. 該類實現Comparable,基本上就是根據相關字段比較 。 [或者,或者 - 爲該課程實施匹配Comparator]。
  3. 創建一個Tuple[] combinedArray [或一個List<Tuple>],並填充您的數據。
  4. 現在,您可以對combineArray進行排序 - 並且您擁有數據,因爲您需要的是 。
  5. 剩下的事情就是 - 迭代排序後的數組 - 並將 數據傳回原始數組/列表。
0

你爲什麼不只是使包括含有領域寵物,老闆,朋友和Cat對象一個陣列並請有需要的領域比較排序。

class PetContainer { // Find a better name 
    public String Pet, Owner, Friend; 
    public bool Cat; 
} 

然後把它們放在一個數組和

class IgnoreCaseComparator implements Comparator<PetContainer> { 
    public int compare(PetContaier PA, PetContainer PB) { 
     return PA.Pet.compareToIgnoreCase(PB.Pet); 
    } 
} 

這只是一個粗略的草圖。制定一個get方法,而不是通過他們的字段訪問它們,併爲這些字段創建一些體面的名稱。

希望它有幫助。

0

要在java中這樣做,您需要編寫自己的構造來完成此操作。

您正在尋找關聯數組功能。要獲得這種類型的功能,您可以使用散列表或散列表。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html

public class CustomeDataType 
{ 
    private String owner; 
    private String friend; 
    private Boolean isCat; 
    // etc 
} 

Map<String, CustomDataType > petArray = new HashMap<String, CustomeDataType>();