簡體   English   中英

集合對Java進行排序

[英]Collections sort Java

嗨,大家好,我有3個收藏夾,第一個我想按名稱排序,第二個用於電子郵件,然后最后一個按年齡分類。 我的問題是使用收藏集是否可行?

如果我在sql中這樣做

sort by name,email,age

我知道這行得通嗎?

我正在嘗試在Java中這樣做。

Collections.sort(listPeople, new Comparator<People>() {
    @Override
    public int compare(final People o1, final People o2) {
        return o1.getName().compareTo(o2.getName());
    }
});

//then

Collections.sort(listPeople, new Comparator<People>() {
    @Override
    public int compare(final People o1, final People o2) {
        return o1.getEmail().compareTo(o2.getEmail());
    }
});

//and then 

Collections.sort(listPeople, new Comparator<People>() {
    @Override
    public int compare(final People o1, final People o2) {
        return o1.getAge().compareTo(o2.getAge());
    }
});

這行得通? 還是每個集合都覆蓋以前的?

如果我理解正確,則應該在此處使用java-8功能。

Collections.sort(listPeople, Comparator.comparing(People::getName)
                     .thenComparing(People::getEmail)
                     .thenComparing(People::getAge));

如果連續對同一集合進行排序,則這些操作將覆蓋其他排序操作的效果。


您可以通過調整自定義比較器來實現。 首先比較名稱 ,如果元素相等,則通過電子郵件進行比較,如果再次相等,則按年齡進行比較。

看一下以下代碼片段:

Collections.sort(listPeople, new Comparator<People>() {
    @Override
    public int compare(final People o1, final People o2) {
        int nameOrder = o1.getName().compareTo(o2.getName());
        if (nameOrder != 0) {
            return nameOrder;
        }

        // Elements names are equal, compare by their email
        int emailOrder = o1.getEmail().compareTo(o2.getEmail());
        if (emailOrder != 0) {
            return emailOrder ;
        }

        // Elements emails are equal, compare by their age
        int ageOrder = o1.getAge().compareTo(o2.getAge());
        // Return that in any case as we do not have another sorting criteria
        return ageOrder;
    }
});

Java 8開始,您可以用更少的代碼實現相同的目的(請參見@Eugene的答案):

Comparator.comparing(People::getName)
    .thenComparing(People::getEmail)
    .thenComparing(People::getAge));

這將創建與上述相同的比較器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM