2012-05-10 74 views
3


基於不同的數據成員對象的名單上有這個類:排序在Java

public class Friend { 

private String name; 
private String location; 
private String temp; 
private String humidity; 

public String getTemp() { 
    return temp; 
} 

public void setTemp(String temp) { 
    this.temp = temp; 
} 

public String getHumidity() { 
    return humidity; 
} 

public void setHumidity(String humidity) { 
    this.humidity = humidity; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 


public String getLocation() { 
    return location; 
} 

public void setLocation(String location) { 
    this.location = location; 
} 
} 

我想基於根據用戶輸入的名稱,位置,溫度和溼度進行排序列表。
編輯:用戶指定通過該數據成員排序有許多工作要做。
什麼是做到這一點的最簡單的方法?
謝謝。

+1

http://stackoverflow.com/questions/5178092/sorting-a-list-of-points-with-java –

回答

5

Java有一個叫做Collections.sort(List, Comparator)的靜態函數,它給出了一個定製比較器的一個(泛化)對象列表,該定製比較器給定兩個相同類型的對象,確定哪一個在另一個之前排序。

你的任務是寫它創建了一個Comparator哪些訂單基於其參數的對象和用戶指定排序順序的功能。例如:

public Comparator<Friend> getComparator(final String sortBy) { 
    if ("name".equals(sortBy)) { 
    return new Comparator<Friend>() { 
     @Override int compare(Friend f1, Friend f2) 
     return f1.getName().compareTo(f2.getName()); 
     } 
    }; 
    } else if ("location".equals(sortBy)) { 
    return new Comparator<Friend>() { 
     @Override int compare(Friend f1, Friend f2) 
     return f1.getLocation().compareTo(f2.getLocation()); 
     } 
    }; 
    } else if ("temp".equals(sortBy)) { 
    // ... 
    } else { 
    throw new IllegalArgumentException("invalid sort field '" + sortBy + "'"); 
    } 
} 
+0

嗨。我編輯了這個問題。請檢查一下。 – Brahadeesh

1
List list=new ArrayList(); 

使用如果否則,如果爲每個標準:

if(location){ 
     Collections.sort(list, new Comparator() { 
      public int compare(YourObject o1, YourObject o2) { 
        return o1.getLocation().compareTo(o2.getLocation()); 
       } 

     }); 

    } 

    } else if(temp){ 

    ........ 
    } 
    ....... 
+0

謝謝你的答案。 – Brahadeesh

5

因爲要通過四個不同的標準對它們進行排序,實現可比沒有意義。在這種情況下,您可能會發現爲每個排序參數創建不同的比較器。但是,你可以實現可比性最合乎邏輯的排序由外地,如姓名。否則,比較者是要走的路。

public class FriendNameComparator extends Comparator<Friend> { 

    // assuming both are non-null for code simplicity; you may wish to change that 
    public int compare(Friend f1, Friend f2) { 
     return f1.getName().compareTo(f2.getName()); 
    } 
} 

public class FriendLocationComparator extends Comparator<Friend> { 

    // assuming both are non-null for code simplicity; you may wish to change that 
    public int compare(Friend f1, Friend f2) { 
     return f1.getLocation().compareTo(f2.getLocation()); 
    } 
} 

// and so forth 

然後,您可以使用集合實用程序類的排序功能按給定的比較器進行排序。

Collections.sort(friendsList, new FriendNameComparator()); // sorts by name 
Collections.sort(friendsList, new FriendLocationComparator()); // sorts by location 
// etc 
+0

謝謝你的答案。 – Brahadeesh