gpt4 book ai didi

java - 不同的集合用于不同的数据排序

转载 作者:行者123 更新时间:2023-12-02 08:28:23 24 4
gpt4 key购买 nike

我有一个任务要使用 Java Collections 框架。我需要从数据库获取用户列表,并将其存储在集合中。 (这就完成了,用户被存储在一个 HashSet 中)。每个用户都是 Person 类的一个实例,用名字、姓氏、出生日期、加入日期和其他一些现在不重要的参数来描述。接下来,我需要将列表存储在不同的集合中(没有说明有多少),提供对它们进行排序的功能:
- 仅名称
- 姓名、出生日期
- 加入日期

好吧,首先,我的 Person 仅将数据存储为字符串(我应该将日期更改为 Date 吗?)。我已经开始使用“按姓名、出生日期”进行排序,因为这就是我在使用字符串对列表调用 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;
}

但是剩下的呢?这是我的:

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 - 或者最好是 LocalDate来自JodaTime ,因为这是一个更好的日期和时间操作库:)

关于java - 不同的集合用于不同的数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4009549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com