我有一个带有两个字段名称和年份的arraylist。我想用条件输入名称(按名称输入排序)对此数组进行排序。如果名称相同,则按年份排序。
Example
Name Year
Ann 2000
Bech 2001
Bach 2013
Bach 2012
Chu 1999
假设我创建的一个函数是排序,输入是Bach。结果将显示
Name Year
Bach 2013
Bach 2012
Ann 2000
Bech 2001
Chu 1999
因为输入是Bach而第一个我想用“Bach”显示所有名称如果同名我会按年份排序(最小 - 最小)。如果没有相同的“Bach”名称,我将使用compareTo()按A-Z排序 这是我的代码,但我没有输入条件名称。请创建一个新函数帮我同样sort_inputname(String inputname)
//Class compare Name- Year
public class Search_Name_Year_Comparator implements Comparator<SearchListInformation>
{
public int compare(SearchListInformation left,
SearchListInformation right) {
// TODO Auto-generated method stub
int dateComparison;
int dataComparison = 0;
if(left.getName().compareTo(right.getName())==0)
{
if(left.getYear().compareTo(right.getYear())>0)
{
return -1;
}
else if(left.getYear().compareTo(right.getYear())<0)
{
return 1;
}
else
return 0;
}
else
return left.getName().compareTo(right.getName());
答案 0 :(得分:0)
有点难以理解你的问题(我假设你不是母语为英语的人,但你不能因此而受到指责)。根据我的理解,您希望对具有2个属性的对象的ArrayList进行排序:Name和Year。让我们假设这些对象被称为&#34; SearchListInformation&#34;,所以你试图对SearchListInformation的ArrayList进行排序。
我在这里要做的是让SearchListInformationclass实现Comparable(非Comparator)接口(有关更多信息,请参阅链接)。 然后您可以使用Collections.sort对ArrayList进行排序,例如:
ArrayList<SearchListInformation> list = new ArrayList<SearchListInformation>();
list.add(new Person("Bob", 2000));
list.add(new Person("Lucy", 2010));
Collections.sort(list);
如果要使用Comparator接口,还可以使用Collections.sort(List,Comparator)。然后你可以使用你发布的代码,但我会这样简化它:
@Override
public int compare(SearchListInformation left, SearchListInformation right) {
if(left.getName().compareTo(right.getName())==0)
return -1*left.getYear().compareTo(right.getYear())
else
return left.getName().compareTo(right.getName());
}
编辑:如果您希望能够指定始终位于列表开头的名称,则应使用第二个选项:实现Comparator接口,如下所示:
public MyComparator implements Comparator<SearchListInformation> {
protected String _priorityName;
public MyComparator(String priorityName) {
_priorityName = priorityName;
}
@Override
public int compare(SearchListInformation left, SearchListInformation right) {
if(left.getName().compareTo(right.getName())==0)
return -1*left.getYear().compareTo(right.getYear())
else if(left.getName().equals(_priorityName)
return -1;
else if(right.getName().equals(_priorityName)
return 1;
else
return left.getName().compareTo(right.getName());
}
}
然后你可以使用:
Collections.sort(list, new MyComparator("Bach"));