我是java中的新程序員。 我想使用集合對一對字符串進行排序。 基本上我想排序名稱和名稱有兩部分,名字和姓氏。 現在,如果我把名單中的第一個名稱並對其進行排序,那麼我將如何在排序名時保留第二個名稱的變化索引。 請幫忙.........使用集合對一對字符串進行排序
回答
兩個解決方案:
1-創建具有兩個成員專用的對象,並實現了Comparable接口。現在你可以使用Collections.sort
2-使用Collections.sort自定義比較器。
像往常一樣,番石榴有很好的功能。見Ordering
實現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);
這裏是像你需要什麼樣的例子,雖然面向對象的解決方案可能是在某些情況下更好。列出數組中的字符串並在比較器中逐一比較它們,直到它們不再相等。數組將保持這對,並且比較器將處理該順序。
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);
既然要排序的名稱,這將是合乎邏輯的創建一個類名稱,有兩個領域:的firstName和lastName的,構造函數初始化這兩個領域,和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(排序呢)方法。
我希望這對你有幫助!如果您有任何疑問,請不要猶豫與我聯繫。
如果這對您有所幫助,您能否將其標記爲正確答案? – bortdc 2013-03-14 09:37:32
- 1. 使用合併排序對n個字符串進行排序
- 2. 對特定規則的字符串集合進行排序
- 3. 對基於字符串數組的對象集合進行排序
- 4. 對字符串數組進行排序
- 5. 以mips對字符串進行排序
- 6. 對字符串數組進行排序
- 7. 對程序集中的字符串進行排序
- 8. 如何對包含數字的字符串集合進行排序?
- 9. 如何使用集合對對象的屬性進行排序
- 10. 使用takeOrdered對字符串進行降序排序
- 11. 使用數字對包含字符串的Arraylist進行排序
- 12. MySQL使用數字對字符串值進行排序?
- 13. 如何使用javascript對字符串數字進行排序
- 14. Java:使用CollatorKey對一個集合進行排序
- 15. 根據另一個集合對集合進行排序
- 16. 如何對AngularFire集合進行排序?
- 17. 是否對Backbone.js集合進行排序?
- 18. 對名稱值集合進行排序
- 19. Java-8對集合進行排序
- 20. 使用awk對字符串行的第一行中的字段進行排序
- 21. 如何在Excel中對混合字符串進行排序?
- 22. AWK按字符串長度對字符串進行排序
- 23. 對字符串中的字符進行排序的C程序
- 24. 使用Python對字符串中的元素進行排序
- 25. 使用空格對字符串值進行排序
- 26. 如何使用nspredicate對非英文字符串進行排序?
- 27. 使用Collections.sort對字符串進行排序?
- 28. 使用搜索字符串對列表進行排序
- 29. 使用python對複雜字符串進行排序
- 30. 使用指針對字符串進行排序
用兩個字段創建一個對象,然後對這些對象進行排序。 – 2013-03-13 19:06:53
我們可以看到一些代碼嗎?你有什麼嘗試? – 2013-03-13 19:06:57