gpt4 book ai didi

java - 使用比较器对列表名称和日期进行排序

转载 作者:行者123 更新时间:2023-12-01 18:28:30 24 4
gpt4 key购买 nike

我正在尝试使用比较器实现自定义排序。到目前为止,我能够按照指定名称位于列表顶部、其余名称位于列表顶部的顺序对列表进行排序。

代码:

public class SortingTest implements Comparator<SortingTest> {
String name;
Date date;

public SortingTest(String name, Date date) {
this.name = name;
this.date = date;
}

@Override
public int compare(SortingTest o1, SortingTest o2) {
if (this.name.equals(o2.name)) {
return 1;
}
return 0;
}

public static void main(String[] args) {
List<SortingTest> list = new ArrayList<SortingTest>();
Calendar cl = Calendar.getInstance();
Date d = cl.getTime();
SortingTest s1 = new SortingTest("Sas", d);
cl.add(Calendar.DATE, 1);
Date d1 = cl.getTime();
SortingTest s2 = new SortingTest("Dave", d1);
cl.add(Calendar.DATE, 1);
Date d2 = cl.getTime();
SortingTest s3 = new SortingTest("Jabir", d2);
cl.add(Calendar.DATE, 1);
Date d4 = cl.getTime();
SortingTest s5 = new SortingTest("Meina", d4);
cl.add(Calendar.DATE, 1);
Date d5 = cl.getTime();
SortingTest s6 = new SortingTest("Sas", d5);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s5);
list.add(s6);

Collections.sort(list, s1);

System.out.println("After sorting");
for (SortingTest st : list) {
System.out.println(st.name);
}
}
}

当前代码输出:

Sas
Sas
Dave
Jabir
Meina

但我想先按名称排序列表,然后按日期排序。所以输出应该是:

Sas, 8/6/2015
Sas, 14/6/2015
Dave, 8/6/2015
Jabir, 10/6/2015
Meina, 11/6/205

更新1:

我的标准是我应该能够传递任何名称(在本例中为“sas”/s1)并对列表进行排序,以便传递的名称应位于列表顶部,然后是其余名称。因此,在上面的示例中,我将对象 s1 传递给 collection.sort 方法。 s1 保存名称“sas”,在比较方法中,我检查列表中是否有任何其他元素具有名称“sas”,然后给出值 1(列表顶部),如果不是,则给出值 0。

最佳答案

首先,您可以实现 Comparable 而不是 Comparator,它允许您使用 Collections.sort(list) 而不是Collections.sort(list, s1).

现在,就我个人而言,我不喜欢更改对象的核心“可比较”要求,因为它们可能出于某种原因以这种方式定义,相反,我喜欢基于以下内容创建 Comparator例如,直接的需求......

Collections.sort(list, new Comparator<SortingTest>() {
@Override
public int compare(SortingTest o1, SortingTest o2) {
int result = o1.name.compareTo(o2.name);
if (result == 0) {
result = o1.date.compareTo(o2.date);
} else {
result = -result;
}
return result;
}
});

这基本上会比较每个 SortingTest 实例的名称,如果它们是 0,它将使用 Date 来确定差异。

这将输出类似...的内容

Sas Thu Aug 07 12:30:11 EST 2014
Sas Mon Aug 11 12:30:11 EST 2014
Meina Sun Aug 10 12:30:11 EST 2014
Jabir Sat Aug 09 12:30:11 EST 2014
Dave Fri Aug 08 12:30:11 EST 2014

关于java - 使用比较器对列表名称和日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173229/

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