按ArrayList Android的条件输入排序

时间:2012-12-29 16:57:38

标签: android

我有一个带有两个字段名称和年份的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());

1 个答案:

答案 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"));