簡體   English   中英

不同的集合用於不同的數據排序

[英]Different collections for different data sorting

我有一個與Java Collections框架一起玩的任務。 我需要從數據庫中獲取用戶列表,並將其存儲在集合中。 (這已完成,用戶存儲在HashSet中)。 每個用戶都是Person類的實例,其中描述了姓名,姓氏,出生日期,加入日期以及其他一些現在不重要的參數。 接下來我需要將列表存儲在不同的集合中(沒有說明有多少)提供按以下方式對它們進行排序的功能:
- 僅限名稱
- 姓,姓,出生日期
- 加入日期

好的,首先,我的Person僅將數據存儲為字符串(我應該將日期更改為Date嗎?)。 我已經開始使用“by name,surname,birthdate”實現排序,因為這是我在使用Strings調用sort列表后得到的結果。 我對嗎 ?

public List createListByName(Set set){
    List ret = new ArrayList<String>();
    String data = "";

    for(Object p: set){
        data = p + "\n";
        ret.add(data);
    }
    Collections.sort(ret);
    return ret;
}

但其余的是什么? 這是我的Person

class Person {

    private String firstname;
    private String lastname;
    )..)


    Person(String name, String surname, (..)){
        firstname = name;
        lastname = surname;
        (..)
    }

    @Override
    public String toString(){
        return firstname + " " + lastname + " " + (..);
    }
}

我不會將所有內容轉換為字符串開頭。 我將實現Comparator<Person> ,然后對List<Person>進行排序:

public List<Person> createListByName(Set<Person> set){
    List<Person> ret = new ArrayList<Person>(set);
    Collections.sort(ret, new NameSurnameBirthComparator());
    return ret;
}

NameSurnameBirthComparator將實現Comparator<Person>並通過首先比較他們的名字,然后他們的姓氏(如果他們的名字相等)然后他們的出生日期(如果他們的姓氏相等)來比較兩個人。

像這樣的東西:

public int compare(Person p1, Person p2) {
    // TODO: Consider null checks, and what to do :)
    int firstNameResult = p1.getFirstName().compareTo(p2.getFirstName());
    if (firstNameResult != 0) {
        return firstNameResult;
    }
    int surnameResult = p1.getSurname().compareTo(p2.getSurname());
    if (surnameResult != 0) {
        return surnameResult;
    }
    return p1.getBirthDate().compareTo(p2.getBirthDate());
}

是的,我會將出生Date存儲為Date - 或者最好將其存儲為JodaTimeLocalDate ,因為這是一個更好的日期和時間操作庫:)

所以我應該為每個人在Person上編寫多個編譯器?

鑒於這是一項家庭作業,我會說這是你開始學習比較器的方式。

只是為了感興趣,你可以通過創建幾個可恢復的比較器來實現這一目的。

您可以使用Bean比較器對各個屬性進行排序。

然后,您可以使用組比較器對多個屬性進行排序。

暫無
暫無

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

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