2013-03-13 110 views
0

我是java中的新程序員。 我想使用集合對一對字符串進行排序。 基本上我想排序名稱和名稱有兩部分,名字和姓氏。 現在,如果我把名單中的第一個名稱並對其進行排序,那麼我將如何在排序名時保留第二個名稱的變化索引。 請幫忙.........使用集合對一對字符串進行排序

+2

用兩個字段創建一個對象,然後對這些對象進行排序。 – 2013-03-13 19:06:53

+3

我們可以看到一些代碼嗎?你有什麼嘗試? – 2013-03-13 19:06:57

回答

0

實現Comparable接口

Class Student implements Comparable{ 
    private String FirstName; 
    private String SecondName; 
    // getters and setters 
    public int compareTo(Student s){ 
     return this.getFirstName().compareTo(s.getFirstName()); 
    } 
} 
List<Student> list = new ArrayList(); 

Collections.sort(list); 
1

這裏是像你需要什麼樣的例子,雖然面向對象的解決方案可能是在某些情況下更好。列出數組中的字符串並在比較器中逐一比較它們,直到它們不再相等。數組將保持這對,並且比較器將處理該順序。

List<String[]> strings; 
    Comparator comparator = new Comparator<String[]>(){ 

     @Override 
     public int compare(String[] o1, String[] o2) { 
      //if parameters are invalid, throw them out. 
      if(o1 == null || o2 == null || o1.length == 0 || o2.length == 0){ 
       throw new InvalidParameterException(); 
      } 

      //Compare the two arrays of strings, string by string. 
      int length = Math.min(o1.length, o2.length); 
      for(int i = 0; i < length; i++){ 
       int compare = o1[i].compareTo(o2[i]); 
       if(compare != 0){ 
        return compare; 
       } 
      } 

      //If the two strings are of different lengths but the same until that point, return the longer string as greater. 
      if(o1.length > o2.length){ 
       return 1; 
      } else if(o2.length > o1.length) { 
       return -1;  
      } 
      return 0; 
     } 
    }; 
    Collections.sort(strings, comparator); 
4

既然要排序的名稱,這將是合乎邏輯的創建一個類名稱,有兩個領域:的firstNamelastName的,構造函數初始化這兩個領域,和getter所以我們可以稍後對其進行測試。

public class Name { 
    private String firstName; 
    private String lastName; 

    public Name(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 
} 

現在,既然你想能夠比較的名字,你必須確保名稱實現可比接口。實現此接口需要覆蓋方法,其中您告訴程序如何比較兩個對象。像這樣:

public class Name implements Comparable<Name> { 
    private String firstName; 
    private String lastName; 

    public Name(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    @Override 
    public int compareTo(Name otherName) { 
     if(this.firstName.compareTo(otherName.firstName) == 0) { 
      return this.lastName.compareTo(otherName.lastName); 
     } 
     else { 
      return this.firstName.compareTo(otherName.firstName); 
     } 
    } 
} 

的compareTo()方法會發生什麼: 首先,我們檢查,如果名字是相等的(的compareTo返回零)。如果是這種情況,我們使用姓氏排序。否則,我們使用名字排序。有關字符串的compareTo方法的詳細信息:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)

現在你可以測試一下使用這個測試類:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

    public class Test { 
     public static void main(String[] args) { 
      Name name = new Name("A", "C"); 
      Name name1 = new Name("A", "A"); 
      Name name2 = new Name("Ba", "F"); 
      Name name3 = new Name("Bb", "A"); 
      Name name4 = new Name("Ca", "D"); 
      Name name5 = new Name("Cc", "Z"); 
      Name name6 = new Name("Cc", "W"); 


      Name nameArray[] = {name, name1, name2, name3, name4, name5, name6}; 
      List<Name> names = new ArrayList<Name>(Arrays.asList(nameArray)); 

      Collections.sort(names); 

      for(Name n : names) { 
       System.out.println(n.getFirstName() + " " + n.getLastName()); 
      } 
     } 
    } 

我們做名稱列表,並使用Collections.sort(排序呢)方法。

我希望這對你有幫助!如果您有任何疑問,請不要猶豫與我聯繫。

+0

如果這對您有所幫助,您能否將其標記爲正確答案? – bortdc 2013-03-14 09:37:32

相關問題