Java 不同的集合用于不同的数据排序
我有一项任务要处理Java集合框架。我需要从数据库中获取用户列表,并将其存储在集合中。(完成后,用户存储在哈希集中)。每个用户都是Person类的一个实例,用名称、姓氏、出生日期、加入日期和其他一些现在不重要的参数进行描述。接下来,我需要将列表存储在不同的集合中(不知道有多少个集合),以提供排序功能:Java 不同的集合用于不同的数据排序,java,sorting,collections,jquery-ui-sortable,Java,Sorting,Collections,Jquery Ui Sortable,我有一项任务要处理Java集合框架。我需要从数据库中获取用户列表,并将其存储在集合中。(完成后,用户存储在哈希集中)。每个用户都是Person类的一个实例,用名称、姓氏、出生日期、加入日期和其他一些现在不重要的参数进行描述。接下来,我需要将列表存储在不同的集合中(不知道有多少个集合),以提供排序功能: -仅限姓名 -姓名、姓氏、出生日期 -加入日期 好的,首先,我的人只将数据存储为字符串(我应该将日期更改为日期吗?)。我已经开始使用“按姓名、姓氏、出生日期”实现排序,因为这是我在使用字符串对列表
-仅限姓名
-姓名、姓氏、出生日期
-加入日期 好的,首先,我的人只将数据存储为字符串(我应该将日期更改为日期吗?)。我已经开始使用“按姓名、姓氏、出生日期”实现排序,因为这是我在使用字符串对列表调用
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;
}
我不会一开始就把所有东西都转换成字符串。我将实现
比较器
,然后对列表进行排序
:
是的,我会将出生日期存储为date
——或者最好存储为LocalDate
,因为这是一个更好的日期和时间操纵库:)
所以我应该为每个任务在每个人身上编写多个压缩程序 鉴于这是一项家庭作业,那么我想说,这是您开始学习比较器的方式 出于兴趣,只有通过创建两个可恢复的比较器才能做到这一点 可以使用对单个属性进行排序
然后您可以使用对多个属性进行排序。因此我应该为每个任务在Person上编写多个压缩机?@owca Yes。如果您想要3个列表(或集合),每个列表(或集合)的排序方式不同,那么您可以为每个排序顺序编写一个comperator。@owca:您可以为每个整体排序顺序编写一个comperator,或者为每个属性编写一个comperator,然后再编写一个实用程序类来组合两个comparator以创建一个新的comparator。是的,我从未使用过它们,所以我现在浏览文档。乍一看,我确信Comparator是一个实现Comparable:P的对象
class Person {
private String firstname;
private String lastname;
)..)
Person(String name, String surname, (..)){
firstname = name;
lastname = surname;
(..)
}
@Override
public String toString(){
return firstname + " " + lastname + " " + (..);
}
}
public List<Person> createListByName(Set<Person> set){
List<Person> ret = new ArrayList<Person>(set);
Collections.sort(ret, new NameSurnameBirthComparator());
return ret;
}
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());
}