繁体   English   中英

如何对对象的ArrayList进行排序?

[英]How can I sort an ArrayList of objects?

我有ArrayList其中包含两个字符串和一个Integer ,但我只需要按字符串Name和字符串LastName对其进行排序,就可以使用Collections.sort这样的方法进行尝试

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

但这仅按名称对ArrayList排序,并且不包括姓氏,如何将姓氏添加到排序中?

使用Comparator.comparing(Contact::getName).thenComparing(Contact::getLastName)作为您的Comparator:

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

好吧,您只需要更改比较功能即可包含其他类似字段

    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}]

}

好吧...将您的闭包转换为完整的匿名类,并利用这种功能来增加排序的复杂性...

就像是

 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;
    }
 });

警告此代码尚未以任何方式进行编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM