Java - 如何对此ArrayList进行排序?

时间:2015-10-31 23:32:13

标签: java sorting object arraylist collections

我是Java的新手,我刚开始学习计算机科学大学课程。

我正在编写一个程序,其中ArrayList保存Personalityindividual对象,在PersonalityList类中声明为private ArrayList<Personality> individual; }

这些Personality个对象包含votes类型int的私有字段。

我还在ArrayList课程中声明了相同的PersonalityList但使用了不同的名称rankedList - 就像这样:private ArrayList<Personality> rankedList;

在我的程序中,我创建了一个名为top(int value)的方法。在这个方法中,我试图使用while循环查看individual列表,从该列表中获取对象,前提是它们的索引号低于value参数的值,将其添加到{{ 1}}列表,然后按照rankedList字段的顺序对rankedList列表进行排序,列表中排名第一的对象(索引为0)。目前,这是我的votes方法:

top

我目前正在使用public void top(int value) { int index = 0; int listSize = individual.size(); rankedList = new ArrayList<Personality>(); if(value > listSize) { value = listSize; } else { System.out.println("Error: Enter a positive integer value."); } if(listSize > 0) { while(index < value) { Personality prsn = individual.get(index); rankedList.add(prsn); System.out.println(prsn.getDetails()); index++; } } else { System.out.println("Error: The array list has no personalities stored inside it."); } } 类中定义的Personality方法(包含对象字段)打印while循环获取的每个getDetails()对象的详细信息,只是为了检查它获得了正确数量的对象。

我理解我需要使用Personality功能查看其他Stack Overflow帖子,但是,即使查看了这些帖子的答案,我也不知道如何将其实现到我的代码中。我已经尝试了但是我不断地向我发出错误,我并不理解。

非常感谢任何帮助,最好是特定的代码。谢谢!

更新:

感谢示例代码@camickr。 在我的Personality类中,我添加了以下代码:

Collections.sort

我还在我的static class votesComparator implements Comparator<Personality> { public int compare(Personality p1, Personality p2) { return p1.getVotes() - p2.getVotes(); } } 课程中编辑了我的top方法:

PersonalityList

但是现在我收到的错误表明&#34;没有为sort(java.util.List)&#34;找到合适的方法,在if(listSize > 0) { while(index < value) { Personality prsn = individual.get(index); rankedList.add(prsn); System.out.println(prsn.getDetails()); index++; } Collections.sort(rankedList); System.out.println("Sort by Natural order"); System.out.println("\t" + people); } else { System.out.println("Error: The array list has no personalities stored inside it."); } 调用。 这是什么原因?

2 个答案:

答案 0 :(得分:2)

您发布的代码与排序无关。重要的代码是您的Personality课程。你要么:

  1. 需要在您的班级或
  2. 上实施Comparable
  3. 创建自定义Comparator
  4. 以下是一个示例,显示了两种方法的示例:

    /*
    **  Use the Collections API to sort a List for you.
    **
    **  When your class has a "natural" sort order you can implement
    **  the Comparable interface.
    **
    **  You can use an alternate sort order when you implement
    **  a Comparator for your class.
    */
    import java.util.*;
    
    public class Person implements Comparable<Person>
    {
        String name;
        int age;
    
        public Person(String name, int age)
        {
            this.name = name;
            this.age = age;
        }
    
        public String getName()
        {
            return name;
        }
    
        public int getAge()
        {
            return age;
        }
    
        public String toString()
        {
            return name + " : " + age;
        }
    
        /*
        **  Implement the natural order for this class
        */
        public int compareTo(Person p)
        {
            return getName().compareTo(p.getName());
        }
    
        static class AgeComparator implements Comparator<Person>
        {
            public int compare(Person p1, Person p2)
            {
                return p1.getAge() - p2.getAge();
            }
        }
    
        public static void main(String[] args)
        {
            List<Person> people = new ArrayList<Person>();
            people.add( new Person("Homer", 38) );
            people.add( new Person("Marge", 35) );
            people.add( new Person("Bart", 15) );
            people.add( new Person("Lisa", 13) );
    
            // Sort by natural order
    
            Collections.sort(people);
            System.out.println("Sort by Natural order");
            System.out.println("\t" + people);
    
            // Sort by reverse natural order
    
            Collections.sort(people, Collections.reverseOrder());
            System.out.println("Sort by reverse natural order");
            System.out.println("\t" + people);
    
            //  Use a Comparator to sort by age
    
            Collections.sort(people, new Person.AgeComparator());
            System.out.println("Sort using Age Comparator");
            System.out.println("\t" + people);
    
            //  Use a Comparator to sort by descending age
    
            Collections.sort(people, Collections.reverseOrder(new Person.AgeComparator()));
            System.out.println("Sort using Reverse Age Comparator");
            System.out.println("\t" + people);
        }
    }
    

答案 1 :(得分:1)

Collections.sort(rankedList,new Comparator<Personality>(){
                     public int compare(Personality p1,Personality p2){
                           // Write your logic here.
                     }});