我想排序对象的列表。每个对象都有一个属性year
和一个属性name
。 Java列表需要排序。如何按时间和相似性对列表进行排序?
类:
public class Record {
String name;
int year;
}
举个例子,假设我们有以下的记录(已经由属性年订购):
对象/记录:
2000 Paul
2000 Peter
2000 paul
2001 Paul P.
2001 micael
2001 jessica
2002 Michael
因为在一年内有多个记录,我想按名称排序,这样si类似名称显示为一个组。因此,分类后,列表应如下所示:
所需的输出:
2000 Peter
2000 Paul
2000 paul
2001 Paul P.
2001 jessica
2001 micael
2002 Michael
在2001年jessica < micael
,因为在2002年有记录迈克尔(其中具有相似性匹配米卡埃尔指标如编辑距离)。 此外,Paul P. < jessica
因为在2000年,我们也有保罗记录。而paul records > Peter
因为在2001年还有一个保罗体育的记录。
我知道相似度指标,如哈罗温克勒,莱文斯坦等这些也按预期在我的代码中。问题是如何排序名单关于两个维度,以及如何用比较实现这个(是它甚至有可能用一个简单的比较?)
让相关类实现Comparable接口,并在重载的compareTo方法中包含您的排序实现,然后使用Collections#sort排序它们的列表。这类问题每天都会被问到。在提问前先做一点调查工作。 – mre
确定'2000 Peter'在'2000 Paul'之前列出的逻辑是什么?如果没有一些明确的逻辑,你可以把它放在文字中,我看不出有用的东西。 –
@AndrewThompson谢谢你,我现在在最初的问题中解释了这一点。 2000年Peter在2000年之前被列入保罗,因为在2001年,Paul P.也有记录(如果使用字符串相似性度量,Paul会与保罗相匹配)。因此,订单不是字母。它取决于以下/以前的记录。 – Spiegelritter