2015-09-30 40 views
2

我已经和ArrayList两个字符串和Integer,但我只需要通过字符串Name和字符串LastName进行排序的话,我用的方法Collections.sort试过这样如何排序对象的ArrayList?

Collections.sort(MyArrayList, (Contact v1, Contact v2) -> v1.getName().compareTo(v2.getname())); 

但这只是排序我ArrayList由名字,并不包括姓氏,我怎么能添加到排序的姓氏?

+1

可能重复:http://stackoverflow.com/questions/1421322/我怎么做,我排序一个列表与多个排序参数。你的比较器也必须尊重姓氏。 –

回答

2

那么你只需要改变你的比较功能,包括其他领域类似这样的

Collections.sort(contacts, (Contact c1, Contact c2) -> { 
     int firstNameComparisonResult = c1.getFirstName().compareTo(c2.getFirstName()); 
     if (firstNameComparisonResult != 0) { 
      return firstNameComparisonResult; 
     } else { 
      return c1.getLastName().compareTo(c2.getLastName()); 
     } 
    }); 

警告:这是假定有没有空。

全部的代码,我使用的,如果你想看看:

class Contact{ 
    final String firstName; 
    final String lastName; 
    final int age; 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public int getAge() { 
     return age; 
    } 

    public Contact(String firstName, String lastName, int age) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.age = age; 
    } 

    @Override 
    public String toString() { 
     return "Contact{" + 
       "firstName='" + firstName + '\'' + 
       ", lastName='" + lastName + '\'' + 
       ", age=" + age + 
       '}'; 
    } 
} 

@Test 
public void sortTest(){ 
    List<Contact> contacts = new ArrayList<>(); 
    contacts.add(new Contact("A","B",37)); 
    contacts.add(new Contact("A","C",34)); 
    contacts.add(new Contact("B","A",35)); 

    Collections.sort(contacts, (Contact c1, Contact c2) -> { 
     int firstNameComparisonResult = c1.getFirstName().compareTo(c2.getFirstName()); 
     if (firstNameComparisonResult != 0) { 
      return firstNameComparisonResult; 
     } else { 
      return c1.getLastName().compareTo(c2.getLastName()); 
     } 
    }); 

    System.out.println(contacts); 
//[Contact{firstName='A', lastName='B', age=37}, Contact{firstName='A', lastName='C', age=34}, Contact{firstName='B', lastName='A', age=35}] 

} 
+0

谢谢,解决了我的问题:) – Diego

0

嗯......将您的闭合成一个完整的匿名类,并使用该动力来提高你的某种复杂......

喜欢的东西

Collections.sort(MyArrayList, new Comparator<Contact>() { 
    public int compare(Contact v1, Contact v2) { 
     int returned = v1.getvName().compareTo(v2.getname()) 
     if(returned==0) { 
      // alas, Math.signum returns a float value in this cas 
      returned = (int) Math.signum(v1.getYourInt(), v2.getYourInt()) 
     } 
     return returned; 
    } 
}); 

警告此代码没有经过以任何方式编译。

3

使用Comparator.comparing(Contact::getName).thenComparing(Contact::getLastName)您比较:

Collections.sort(MyArrayList, Comparator.comparing(Contact::getName).thenComparing(Contact::getLastName));